2011-03-28 16 views
1

データベースへの接続をオープンする方が良いです - 私は、この接続に私は使用した後にデータベースへの接続を閉じますか?

または

を閉じるために使用した後

と -

任意のquerys ...更新を行う....削除プログラムのロード時に接続を開く -

終了してプログラムが終了したら?一般的には、事前

+0

第2のアプローチは、最も大きな反パターンの1つです。しないでください – Marcote

答えて

6

おかげで、あなたのコード内でできるだけ早く(廃棄)を閉じます。 try/finallyまたはusingブロックを使用します。

実際には、アプリケーションのConnectionPool設定によって異なります。

基本的にConnectionPoolが存在するということは、接続の使用(何回、どのくらい長く維持する必要がある)をもう心配する必要がなくなり、外部設定になるということです。

BTW:WinCEフレームワークを除いて、わずかにdifferent rulesです。

2

は、終了すると常にADO.NET接続を閉じます。その理由は、接続がado.NETインフラストラクチャの背後にプールされているため、最初に接続を開いても接続を閉じてプールに解放しても、アプリケーションの他の部分が接続を高速化できるためです。この規則に対するいくつかの例外は、組み込みデータベースによっては実行できますが、単一のケースを調べる必要があります。

2

ブロックは常にusingブロックを使用して接続を閉じる必要があります。

1

接続を閉じることはDisposingと同じではありません。クローズされた接続は、接続文字列の辞書ルックアップに基づいて接続プールによって再利用できます(接続文字列はプールを使用するには同一である必要がありますが、この機能は透過的です)。一方、USINGを破棄または使用すると、接続オブジェクトは破棄され、再利用することはできません。

すぐに接続を再開する予定がある場合は、[閉じる]を使用する方が効果的です。

+0

明確にするために、Disposeを呼び出すと接続プールから接続が削除されません。そして、私はCloseとUsingのステートメントのパフォーマンスの問題から離れています。 –

+0

Microsoftのベースクラスライブラリチーム(2010年5月6日)の開発者(http://social.msdn.microsoft.com/profile/david%20m.%20kean/)からの引用は次のとおりです。例外はSqlConnection、et 「閉じる」は「廃棄」と同じ意味ではありません。 Closeは接続を閉じますが、後でOpenを呼び出すことで同じ接続インスタンスを再利用できます。 Disposeは接続を閉じますが、同じ接続インスタンスを再利用することはできません。 http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/b3587ccc-74e0-4575-9b60-7c529d2607ac – Bengie

+0

「接続の追加」セクションを参照してください。http://msdn.microsoft.com /en-us/library/8xx3tyca.aspx –

関連する問題