c# - 在 Dispose 方法中关闭数据库连接是否正确?

标签 c# .net database-connection dispose

我怀疑我们的一个应用程序中使用的数据库连接并不总是关闭。我去看了代码,发现了一个 DataProvider 类,它有 SqlConnection 对象。连接在此类的构造函数中打开,并在其 Dispose 方法中关闭(不要判断,我知道保持打开的连接是邪恶的,这不是我的代码,也不是重点无论如何问题)。 Dispose 方法是这样实现的:

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

        _disposed = true;
    }
}

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

我认为应该调用 _conn.Dispose() - 我说得对吗,它会影响不关闭连接吗(可能不会)?

最佳答案

Dispose 永远不会自动调用。

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

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

This article提出实现该模式的正确方法

希望对您有所帮助!

塞德里克

关于c# - 在 Dispose 方法中关闭数据库连接是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016800/

相关文章:

c# - ServiceStack ApiKeyAuthProvider 在每个请求上触发 6 个选择语句

c# - 我应该使用 IEquatable 来简化工厂测试吗?

php - 如何将数据库类与数组连接连接

mysql - 使用 PGSQL() 将 postgresql 与 Asterisk 连接

ssh - 创建从 Jump 主机到数据库的 SSH 隧道并通过 Jump 主机端口访问数据库

c# - 如何在回发时从 ListView 中的动态控件获取值?

c# - 在同一解决方案/项目中混合 .NET 3.5 与 4/4.5 程序集

c# - 免费/开放图书馆以查找相似图像

c# - 调试器尝试使用错误的程序集名称启动程序集

c# - edmx 计算列