web-dev-qa-db-ja.com

connection.Close()とconnection.Dispose()の違いは何ですか?

_System.Data.SQLite_のSQLiteConnectionオブジェクトが2つの同様のメソッドを所有していることに気づきました。

  • Close()
  • Dispose()

SQLiteDataReaderオブジェクトについても同じです。

違いはなんですか ?

11
Epoc

Disposeは、接続が閉じられていない場合も閉じますが、Closeを呼び出すと、接続を再度開くことができます。これは、接続が破棄されている場合は不可能です。

一般に、Closeを呼び出さないでください。接続の作成をusingブロックでラップすることにより、disposeを暗黙的に呼び出します。

using (var connection = new SqlConnection(...))
{
    // use connection here.
} // connection gets closed and disposed here.
24
Steven

Connection.Close()は、接続文字列で定義されているように、サーバーへの接続を単に閉じます。この時点以降、接続を使用/再開できます。

Connection.Dispose()は完全にクリーンアップし、管理されていないすべてのリソースを削除して、その接続が再び使用されないようにします。破棄が呼び出されたら、そのオブジェクトを使用しようとしないでください。 Dispose(), Close() `内では、すべて確実に呼び出されます。

可能であれば、usingのような構文を使用して、正しくクリーンアップされるようにすることをお勧めします。

using(SqlLiteConnection conn = new SqlLiteConnection(...))
{
   // Do work here
}

これにより、例外がスローされても、接続が自動的に破棄されます。

6
Ian