SQL Serverへの接続(切断モード)でWindowsフォームアプリケーションを実行しています。アプリケーションで処理するすべてのアクションは、接続が必要です。だから私は接続を閉じる場所を知らない。データベース接続を切断モードで閉じないとどうなりますか
私は接続を終了しないかどうか尋ねています。実行時エラーが表示されないことはわかっています。しかし、他のエラーが表示されることはありますか?
SQL Serverへの接続(切断モード)でWindowsフォームアプリケーションを実行しています。アプリケーションで処理するすべてのアクションは、接続が必要です。だから私は接続を閉じる場所を知らない。データベース接続を切断モードで閉じないとどうなりますか
私は接続を終了しないかどうか尋ねています。実行時エラーが表示されないことはわかっています。しかし、他のエラーが表示されることはありますか?
それぞれのメソッド、プライベートフィールドまたはGetConnection()
メソッドなどから同じ接続を使用している場合、リスクがあります。接続がまだ開いているときに読み書きしようとする可能性があります。
これにより、エラーが発生する可能性があり、ライブSQLデータベースを使用していると、ヒープ全体が壊れてしまう可能性があります。
可能であれば、DBにアクセスするたびにusing
ステートメントで接続の新しいインスタンスを作成します。このよう
:
var connectionString = "YourConnectionStringToTheDB";
var queryString ="YourSQLQueryHere"; // FROM * IN tbl SELECT * etc...
using (SqlConnection connection = new SqlConnection(
connectionString))
{
using (SqlCommand command = new SqlCommand(queryString, connection))
{
command.Connection.Open();
command.ExecuteNonQuery();
}
}
それが閉じられ、コードが外部にusing
文のスコープの実行時に廃棄されるこの方法です。
SqlCommandも処理できるので、using
ステートメントにも含まれていることに注意してください。
これは、よりクリーンなコードであり、ガベージコレクタによる廃棄のためのオブジェクトをマークします。 (Googleはあなたの友人です) - 大きな話題;読むべきものがたくさんあります。ここで
はあなたにいくつかの詳細を与える同様の質問です:The C# using statement, SQL, and SqlConnection
EDIT
はまだよく、あなたは、実行時にすべてのエラーを処理するためにtry { }
catch { }
ブロックであなたのSQLコードをラップすることができます。
別の注意として、 'SqlCommand'も' IDisposable'を実装しているので、これも同様に 'SqlCommand'をラップします。 –
これを反映するために私の答えを更新しました –
"接続"、 "ちょうど1"のように? 1つの接続しか使用しないことを保証できますか?そうであれば、大きな問題はないはずです。一方、接続をすべて自由に作成し、それらを閉じたり破棄したりしないと、いつも困ってしまうことになります。 –