在Dispose方法中关闭数据库连接是对的吗?
-
06-07-2019 - |
题
我怀疑我们的某个应用程序中使用的数据库连接并不总是关闭。我去看了代码,我发现了一个具有 SqlConnection
对象的类 DataProvider
。连接在这个类的构造函数中打开,并在它的 Dispose
方法中关闭(不要判断,我知道保持一个开放的连接是邪恶的,它不是我的代码,它不是重点无论如何这个问题)。 Dispose
方法实现如下:
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_conn != null)
_conn.Close();
}
_disposed = true;
}
}
问题是:
是否始终保证连接已关闭?
这段代码对吗?
我认为应该调用 _conn.Dispose()
- 我是对的,是否会影响不关闭连接(可能不会)?
解决方案
永远不会自动调用Dispose。
在显式调用对象的Dispose方法,或者在using()块中使用类时,连接不会关闭
更安全的方法是在终结器中调用dispose方法,并确保在调用Dispose方法时抑制终结器。
本文介绍了实施模式的正确方法
希望它有所帮助!
和Cédric
其他提示
conn.Dispose();
也会关闭连接,所以不能伤害更改它以遵循配置模式。
但功能相同,所以其他地方一定有问题。
http://msdn.microsoft的.com / EN-US /库/ system.data.sqlclient.sqlconnection.close.aspx
如果SqlConnection没用了 范围,它不会被关闭。因此, 你必须明确关闭 通过调用Close或者连接 处置。关闭和处理是 在功能上等同。如果 连接池值池化 设置为true或是,底层 连接返回到 连接池。另一方面,如果 Pooling设置为false或no ,. 与服务器的底层连接是 闭合。
不隶属于 StackOverflow