4

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

IE:

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();
    }
}

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

谢谢你。

4

3 回答 3

6

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

using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

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

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

于 2013-04-05T19:00:14.837 回答
5

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

于 2014-02-11T15:50:38.650 回答
4
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
}

在这种情况下, dispose 将关闭连接。他们在文档中有很好的关于连接处理的部分。

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

于 2016-08-24T14:27:14.643 回答