如果使用using子句,是否需要关闭DbConnection?
可能重复:
使用块是否会关闭数据库连接?
以下是不需要db.Close()
的吗?
using (DbConnection db = GetDbConnection()) { // do data-access stuff // ... db.Close(); }
如果使用using子句,是否需要关闭DbConnection?
不,如果使用using子句,则无需关闭DbConnection?
和
是的,这里没有必要,因为当using
范围结束时,连接将意味着关闭和释放所有内存。
由于DBConnection
实现了IDisposable
接口,因此DBConnection
的Dispose
方法中存在close函数。
但是,如果某些线条在近线之后,则它很有用
using (DbConnection db = GetDbConnection()) { // do data-access stuff // ... db.Close(); //Useless }
但这里很有用
using (DbConnection db = GetDbConnection()) { // do data-access stuff // ... db.Close(); //Useful // Some more code }
在那种情况下你可以做到
using (DbConnection db = GetDbConnection()) { // do data-access stuff // ... } // Some more code which was previously inside using section.
只是为了确保我已经检查了代码:)
protected override void Dispose(bool disposing) { if (disposing) { this._userConnectionOptions = (DbConnectionOptions) null; this._poolGroup = (DbConnectionPoolGroup) null; this.Close(); } this.DisposeMe(disposing); base.Dispose(disposing); }
这是inheritance自DbConnection的SqlConnection的实现。 正如你所看到的那样.Close()方法:)
据我所知,当调用Dispose()
方法时,会自动执行Close()
。
所以db.Close();
这里没有必要。
在闭括号中调用Dispose()
。
我认为在DbConnection
, Dispose
方法还会检查连接是否已关闭。 所以不,它可能没有必要,但我个人认为这是一种良好的做法,提高了可读性,并且它不会影响性能,因为Close
会被这种或那种方式调用。
从SqlConnection
(Derived of DbConnection
)类的dispose实现中提取的代码:
public void Dispose() { Dispose(true); } protected override void Dispose(bool disposing) { if (disposing) { this.Close(); } base.Dispose(disposing); }
using
关键字使用IDisposable
接口。 上述方法是方法实现。 它将关闭连接。