【问题标题】:Will a using block close a database connection?using 块会关闭数据库连接吗?
【发布时间】:2011-03-09 09:03:08
【问题描述】:
using (DbConnection conn = new DbConnection())
{
    // do stuff with database
}

using 会阻止调用conn.Close()吗?

【问题讨论】:

    标签: c# database using


    【解决方案1】:

    是的,它会的; DbConnection.Dispose() 的实现调用Close()(其派生实现也是如此)。

    【讨论】:

    • 不是看派生类是否覆盖了Dispose(bool)方法吗?如果派生类没有覆盖它并调用'Close()',则连接不会在 using 块结束时关闭(调用 Dispose 时)
    • 可以肯定 AL 的评论是准确的,因为 DBConnection 实际上并没有覆盖 System.ComponentModel.Component 提供的 Dispose。在实践中,尽管我怀疑是否有任何 DBConnection 实现不会覆盖 Dispose 并关闭任何连接,因为它本身不会清理的连接类将是一个非常糟糕的实现。
    【解决方案2】:

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

    编辑:来自 Microsoft:“连接在 using 块结束时自动关闭。”

    【讨论】:

    • 虽然链接可以解决问题,但它也可能包含更多信息。这里有一个小提要,可以帮助读者专注于重点。
    【解决方案3】:

    using 块将通过调用Dispose() 方法确保DbConnection 对象的销毁。 Dispose() 方法将依次调用Close() 方法,并且必须等待它完成关闭与数据库的连接。

    【讨论】:

      【解决方案4】:

      肯定是的,因为它会处理连接,并且在处理连接的内部逻辑之前调用关闭。

      【讨论】:

        猜你喜欢
        • 2015-05-02
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2013-10-16
        相关资源
        最近更新 更多