我正在使用库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();
}
}
那么......我怎样才能避免连接泄漏?
谢谢。
答案 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
}
在这种情况下,处理将关闭连接。他们在文档中有很多关于连接处理的内容。