2009-06-19 93 views
5

我怀疑在我们的应用程序中使用的数据库连接并不总是关闭。我去看代码,我发现有一个DataProvider类,它有SqlConnection对象。连接在这个类的构造函数中打开,并关闭它的Dispose方法(不要断定,我知道保持开放连接是邪恶的,它只是不是我的代码,它不是问题的关键)。该Dispose方法来实现这样的:在Dispose方法中关闭数据库连接是否正确?

protected virtual void Dispose(bool disposing) 
{ 
    if (!_disposed) 
    { 
     if (disposing) 
     { 
      if (_conn != null) 
       _conn.Close(); 
     } 

     _disposed = true; 
    } 
} 

的问题是:
是否始终保证连接被关闭?
这段代码对吗?

我认为应该有_conn.Dispose()叫 - 我是对的,它可能会影响不关闭连接(可能不是)?

+0

如果您怀疑使用性能计数器进行检查确认。 – RichardOD 2009-06-19 08:05:05

+0

要检查的关键值是NumberOfPooledConnections。 – RichardOD 2009-06-19 08:08:16

回答

8

处理决不会自动调用。

连接不会被关闭,直到你的对象的Dispose方法被显式调用,或者如果你的类中使用的使用()块

一个更安全的方法是调用Dispose方法在你的终结和确保在调用Dispose方法时终止器被抑制。

This article目前实现该模式

希望它可以帮助正确的方法!

Cédric

2

conn.Dispose();也会关闭连接,所以不能伤害它改变它遵循配置模式。

但是在功能上等价,所以必须有其他问题。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

如果SqlConnection的超出 范围,它不会被关闭。因此, 您必须通过调用Close或 Dispose来明确关闭 连接。 Close and Dispose在功能上等同于 。如果 连接池值设置为true或是,则将底层 连接返回到连接池 连接池 。另一方面,如果 池设置为false或否, 底层连接到服务器是关闭 。

相关问题