使用语句和Close方法

Jam*_*mes 14 .net c#

当与数据库连接对象一起使用时,using语句是否真的调用close方法?MSDN文档说它确保调用Dispose方法,但没有提到close.我看到Stack Overflow上的帖子,人们说它同时做到了.有人在微软或其他有效的证据中以这种或那种方式得到具体答案吗?

Dan*_*boo 19

这是SqlConnection类的"Dispose"方法:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        this._userConnectionOptions = null;
        this._poolGroup = null;
        this.Close();
    }
    this.DisposeMe(disposing);
    base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它确实调用了Close()


CMS*_*CMS 6

如果你使用一个using语句连接将被关闭,那么实现IDisposable的对象在被垃圾收集后仍然保持打开是没有意义的...

但是,Close()和Dispose()不一样的东西:

  • Dispose()总是Close()隐含地打电话.
  • Dispose()清除ConnectionString,Close()没有.
  • 如果您要再次重新打开连接,Close()则不应该Dispose()

如果你选择使用Dispose()不要直接调用它,using声明它是最好的方法.