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

问题描述:

我正在使用库microsoft.practices.enterpriselibrary来访问SQL Server数据库。 我想知道如何在使用ExecuteNonQuery方法时关闭连接?如何关闭Microsoft.Practices.EnterpriseLibrary.Data.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(); 
    } 
} 

所以...我如何才能避免连接泄漏?

谢谢。

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

using Microsoft.Practices.EnterpriseLibrary.Data.Sql; 

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

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

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

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

企业库处理关闭连接你,除了使用数据读取器的情况下。当使用的IDataReader,您应该使用接近或使用调用在这种情况下的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