当与数据库连接对象一起使用时,using语句是否真的调用close方法?MSDN文档说它确保调用Dispose方法,但没有提到close.我看到Stack Overflow上的帖子,人们说它同时做到了.有人在微软或其他有效的证据中以这种或那种方式得到具体答案吗?
这是SqlConnection类的"Dispose"方法:
protected override void Dispose(bool disposing) { if (disposing) { this._userConnectionOptions = null; this._poolGroup = null; this.Close(); } this.DisposeMe(disposing); base.Dispose(disposing); }
正如你所看到的,它确实调用了Close()
如果你使用一个using
语句连接将被关闭,那么实现IDisposable的对象在被垃圾收集后仍然保持打开是没有意义的...
但是,Close()
和Dispose()
不一样的东西:
Dispose()
总是Close()
隐含地打电话.
Dispose()
清除ConnectionString,Close()
没有.
如果您要再次重新打开连接,Close()
则不应该Dispose()
如果你选择使用Dispose()
不要直接调用它,using
声明它是最好的方法.