是否有任何需要关闭的DbConnection如果使用了使用条款? [重复](Is there a

2019-06-27 04:17发布

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

db.Close()不必要的下面?

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

   db.Close();
}

Answer 1:

是否有任何需要关闭的DbConnection如果使用了使用条款?

不,没有必要关闭的DbConnection如果使用了使用条款?

是的,它是在这里不必要的,因为当范围using两端,连接将部署意味着关闭和释放所有内存。

由于DBConnection实现IDisposable接口,关闭功能是有在Dispose的方法DBConnection

但是,如果一些线路已经接近行之后则是有益的

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.


Answer 2:

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

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

这是的SqlConnection的是从继承的DbConnection实施。 正如你可以看到有this.Close()方法:)



Answer 3:

对于我所知道的,当时Dispose()方法被调用, Close()是自动进行的。
所以db.Close(); 没有必要在这里。



Answer 4:

在右括号中Dispose()被调用。

我想在DbConnectionDispose方法也将检查连接被关闭。 所以,不,它可能是没有必要的,但我个人认为这是很好的做法,提高了可读性,它不会影响性能,因为Close将被称为这种或那种方式。



Answer 5:

取出的编码从处置贯彻SqlConnection (衍生的DbConnection )类:

public void Dispose()
{
   Dispose(true);
}

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
     this.Close();
  }
  base.Dispose(disposing);
}

using关键字使用IDisposable接口。 上述方法是该方法的实施。 它会关闭连接。



文章来源: Is there any need to close a DbConnection if a using clause is used? [duplicate]