8

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

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

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

   db.Close();
}
4

5 回答 5

12

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

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

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

由于DBConnection实现了接口,所以在方法中IDisposable就有了close函数。DisposeDBConnection

但是,如果某些行在关闭行之后,那么它很有用

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.
于 2012-08-20T07:54:49.823 回答
4

只是为了确保我已经检查了代码:)

   protected override void Dispose(bool disposing)
    {
      if (disposing)
      {
        this._userConnectionOptions = (DbConnectionOptions) null;
        this._poolGroup = (DbConnectionPoolGroup) null;
        this.Close();
      }
      this.DisposeMe(disposing);
      base.Dispose(disposing);
    }

这是继承自DbConnection的SqlConnection的实现。如您所见,有this.Close()方法:)

于 2012-08-20T08:03:08.910 回答
2

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

于 2012-08-20T07:54:04.817 回答
1

在右大括号处Dispose()被调用。

我认为在DbConnectionDispose方法中也会检查连接是否关闭。所以不,这可能没有必要,但我个人认为这是一种很好的做法,可以提高可读性,并且不会影响性能,因为Close会以一种或另一种方式调用。

于 2012-08-20T07:54:48.717 回答
1

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。上面的方法是方法实现。它将关闭连接。

于 2012-08-20T07:58:44.313 回答