如果使用using子句,是否需要关闭DbConnection?

可能重复:
使用块是否会关闭数据库连接?

以下是不需要db.Close()的吗?

 using (DbConnection db = GetDbConnection()) { // do data-access stuff // ... db.Close(); } 

如果使用using子句,是否需要关闭DbConnection?

不,如果使用using子句,则无需关闭DbConnection?

是的,这里没有必要,因为当using范围结束时,连接将意味着关闭和释放所有内存。

由于DBConnection实现了IDisposable接口,因此DBConnectionDispose方法中存在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自DbConnectionSqlConnection的实现。 正如你所看到的那样.Close()方法:)

据我所知,当调用Dispose()方法时,会自动执行Close()
所以db.Close(); 这里没有必要。

在闭括号中调用Dispose()

我认为在DbConnectionDispose方法还会检查连接是否已关闭。 所以不,它可能没有必要,但我个人认为这是一种良好的做法,提高了可读性,并且它不会影响性能,因为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接口。 上述方法是方法实现。 它将关闭连接。