如何关闭Microsoft.Practices.EnterpriseLibrary.Data.ExecuteNonQuery的连接

时间:2013-03-18 09:56:24

标签: c# sql-server enterprise-library

我正在使用库microsoft.practices.enterpriselibrary来访问SQL Server数据库。 我想知道在使用ExecuteNonQuery方法时如何关闭连接?

即:

using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

SqlDatabase db = null;
try
{
    db = new SqlDatabase(stringConnection);
    db.ExecuteNonQuery("storedprocedure", someParams);
}
catch (Exception ex)
{
}

我不能做像

这样的事情
finally
{
    if (db != null)
    {
        ((IDisposable)db).Dispose();
    }
}

那么......我怎样才能避免连接泄漏?

谢谢。

3 个答案:

答案 0 :(得分:4)

您可以将代码放在“使用”块中。这将确保在完成后关闭连接。

using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

SqlDatabase db = new SqlDatabase(stringConnection);
using (DbConnection con = db.CreateConnection())
{
    db.ExecuteNonQuery("storedprocedure", someParams);
}

或者您可以使用con.Close()。

答案 1 :(得分:4)

通常,您无需担心关闭连接,因为数据访问块可以更有效地管理连接。选中以下链接中的“管理连接”部分:http://msdn.microsoft.com/en-us/library/ff953187(v=pandp.50).aspx

答案 2 :(得分:1)

Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("GetProductsByCategory"); 
db.AddInParameter(cmd, "@requestId", DbType.Int32, requestId);
db.ExecuteNonQuery(cmd);

企业库处理关闭连接,除了使用数据读取器的情况。使用IDataReader时,您应该使用close或using来调用dispose(与调用close相同)

Database db = DatabaseFactory.CreateDatabase();

DbCommand cmd = db.GetSqlStringCommand("Select Name, Address From Customers");
using (IDataReader reader = db.ExecuteReader(cmd))
{
   // Process results
}

在这种情况下,处理将关闭连接。他们在文档中有很多关于连接处理的内容。

https://msdn.microsoft.com/en-us/library/ff648933.aspx