在Dispose方法中关闭数据库连接是否正确?
问题描述:
我怀疑在我们的应用程序中使用的数据库连接并不总是关闭。我去看代码,我发现有一个DataProvider
类,它有SqlConnection
对象。连接在这个类的构造函数中打开,并关闭它的Dispose
方法(不要断定,我知道保持开放连接是邪恶的,它只是不是我的代码,它不是问题的关键)。该Dispose
方法来实现这样的:在Dispose方法中关闭数据库连接是否正确?
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_conn != null)
_conn.Close();
}
_disposed = true;
}
}
的问题是:
是否始终保证连接被关闭?
这段代码对吗?
我认为应该有_conn.Dispose()
叫 - 我是对的,它可能会影响不关闭连接(可能不是)?
答
处理决不会自动调用。
连接不会被关闭,直到你的对象的Dispose方法被显式调用,或者如果你的类中使用的使用()块
一个更安全的方法是调用Dispose方法在你的终结和确保在调用Dispose方法时终止器被抑制。
This article目前实现该模式
希望它可以帮助正确的方法!
Cédric
答
conn.Dispose();
也会关闭连接,所以不能伤害它改变它遵循配置模式。
但是在功能上等价,所以必须有其他问题。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx
如果SqlConnection的超出 范围,它不会被关闭。因此, 您必须通过调用Close或 Dispose来明确关闭 连接。 Close and Dispose在功能上等同于 。如果 连接池值设置为true或是,则将底层 连接返回到连接池 连接池 。另一方面,如果 池设置为false或否, 底层连接到服务器是关闭 。
如果您怀疑使用性能计数器进行检查确认。 – RichardOD 2009-06-19 08:05:05
要检查的关键值是NumberOfPooledConnections。 – RichardOD 2009-06-19 08:08:16