在Dispose方法中关闭数据库连接是对的吗?

时间:2009-06-19 07:47:36

标签: c# .net database-connection dispose

我怀疑我们的某个应用程序中使用的数据库连接并不总是关闭。我去看了代码,我找到了一个DataProviderSqlConnection对象。连接在这个类的构造函数中打开,并以它的Dispose方法关闭(不要判断,我知道保持一个开放的连接是邪恶的,这不是我的代码,它不是问题的重点)。 Dispose方法实现如下:

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

        _disposed = true;
    }
}

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

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

2 个答案:

答案 0 :(得分:8)

永远不会自动调用Dispose。

在显式调用对象的Dispose方法,或者在using()块中使用类时,连接不会关闭

更安全的方法是在终结器中调用dispose方法,并确保在调用Dispose方法时抑制终结器。

This article提供了实现模式的正确方法

希望它有所帮助!

和Cédric

答案 1 :(得分:2)

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

但功能相同,所以其他地方一定有问题。

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

  

如果SqlConnection没用了   范围,它不会被关闭。因此,   你必须明确关闭   通过调用Close或者连接   处置。关闭和处理是   在功能上等同。如果   连接池值池化   设置为true或是,底层   连接返回到   连接池。另一方面,如果   Pooling设置为false或no ,.   与服务器的底层连接是   闭合。