【问题标题】:Does OledbConnection.Dispose() close the connection? [duplicate]OledbConnection.Dispose() 是否关闭连接? [复制]
【发布时间】:2012-08-20 08:10:26
【问题描述】:

可能重复:
Is there any need to close a DbConnection if a using clause is used?

OledbConnection.Dispose() 是否关闭连接?

我知道SqlConnection 可以,但是OledbConnection 呢?

【问题讨论】:

  • 你认为有什么不同?
  • 是的。不要调用 .Dispose,而是尝试使用 using 块来释放连接,因为 using 块内的代码完成执行。
  • @AmiramKorach:人们只谈论过SqlConnectionDbConnection 是一个抽象类,所以它取决于OledbConnection 的实际实现。

标签: c# .net dispose oledbconnection


【解决方案1】:

是的,它也是。

来源:OleDbConnection.Dispose Method (Boolean)

Dispose 方法调用 Close,并从 连接池。

有关详细信息,请参阅参考链接上的Remarks 部分,了解释放托管和非托管资源的情况。

【讨论】:

    【解决方案2】:

    是的,根据 MSDN 上的文档 http://msdn.microsoft.com/en-us/library/aa325890(v=vs.71).aspxOleDbConnection.Dispose() 也确实调用了 OleDbConnection.Close()

    【讨论】:

      【解决方案3】:

      是的 MSDN:

      Dispose 方法调用 Close,并从连接池中移除 OleDbConnection。

      请注意,以上内容来自 .NET Framework 1.1。但是(在这种情况下)你可以指望没有改变的事情。

      此外,您几乎可以 100% 确定实现 IDbConnection 的每个类都将“关闭”Dispose 方法中的连接 - 无论这对特定实现意味着什么都不相关,但它相当于手动调用Close

      每一个不这样做的实现都应该被 IMO 视为损坏。

      【讨论】:

        【解决方案4】:

        这是终极证明.. Dispose 方法的实际代码,使用反射器拍摄:

        // System.Data.OleDb.OleDbConnection
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                this._userConnectionOptions = null;
                this._poolGroup = null;
                this.Close();
            }
            this.DisposeMe(disposing);
            base.Dispose(disposing);
        }
        

        【讨论】:

          【解决方案5】:

          是的。如果没有,那么它就不能完全处置它的资源。 BinaryReader、BinaryWriter 等也都关闭了底层流

          【讨论】:

            猜你喜欢
            • 2011-08-08
            • 1970-01-01
            • 2018-04-09
            • 1970-01-01
            • 2017-05-24
            • 1970-01-01
            • 2011-03-22
            • 2013-03-04
            • 2020-03-16
            相关资源
            最近更新 更多