C#でWindowsフォームからMySqlデータベースに対してクエリを実行した後、トレッドを閉じる適切な方法は何ですか?
単純な開閉で十分ですか?
conn.Open();
//querycode
conn.Close():
C#でWindowsフォームからMySqlデータベースに対してクエリを実行した後、トレッドを閉じる適切な方法は何ですか?
単純な開閉で十分ですか?
conn.Open();
//querycode
conn.Close():
使用してみてください:
using(MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
} // conn is automatically closed and disposed at the end of the using block
後でクリーンアップする必要があるリソースを使用するクラスは、通常、IDisposableインターフェイスを実装します。これは、リソースを解放するために使用できる Dispose() という関数を提供することを意味します。
使い捨てオブジェクトの場合、usingステートメントを使用できます。
using ( SomeDisposableClass c = new SomeDisposableClass() ) {
// ... your code here
} // c.Dispose() automatically called here, freeing up resources
クラスが適切にコーディングされていれば、Dispose() 関数でデータベース接続、開いているファイル ハンドルなどのリソースを解放する必要があります。
これは、MySQL がおそらく Dispose() でデータベースから切断されることを意味するため、c.Close() を明示的に呼び出す必要はおそらくありませんが、必ずドキュメントを確認してください。
using
このように接続オブジェクトをブロックにラップすることもできます。
using (var con = new MySqlConnection(/*connection string*/))
{
con.Open();
//do stuff
// con.Close(); //don't need this it will be closed automatically*
}
(※参照)
いいえ、あなたの質問のコードは十分ではありません。クエリが例外をスローした場合、適切なタイミングで Close() を行わず、ガベージ コレクターが気付くまでハングしたままになります。
他の人が示すように、オブジェクトをusing
ブロックで囲むか、少なくとも try/finally 構造で囲む必要があります。