8

重複の可能性:
using ブロックはデータベース接続を閉じますか?

以下は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()が呼び出されます。

DbConnectionこのDisposeメソッドでは、接続が閉じているかどうかもチェックすると思います。いいえ、おそらく必要ではありませんが、個人的には良い習慣であり、読みやすさが向上し、何らかの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 に答える