在Dispose方法中关闭数据库连接是对的吗?
我怀疑我们的某个应用程序中使用的数据库连接并不总是关闭。 我去看代码,我发现了一个具有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方法时抑制终结器。
本文介绍了实现该模式的正确方法
希望能帮助到你 !
塞德里克
conn.Dispose();
也将关闭连接,所以不能伤害更改它遵循配置模式。
但function上相同,所以其他地方一定有问题。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx
如果SqlConnection超出范围,则不会关闭。 因此,您必须通过调用Close或Dispose显式关闭连接。 关闭和处置在function上是等效的。 如果连接池值Pooling设置为true或yes,则将基础连接返回到连接池。 另一方面,如果Pooling设置为false或no,则关闭与服务器的基础连接。