私の C# プログラムから、SQL 接続を開き、テーブルを更新します。その後、接続を閉じます。また、Management Studio のアクティビティ モニターで確認すると、新しいプロセスが作成され、プログラムから SQL 接続を閉じても、プロセスはアクティビティ モニターに残っています。このプロセスがどのように動作するかを教えてください。これらのプロセスを明示的にクリアする必要がありますか? ありがとう。
2 に答える
5
ここでプロセスの概念を間違って使用していると思います。
ADO.NET はconnection pool
. これはOpen
、SqlConnection インスタンスでメソッドを呼び出すときに、データベースへの新しい物理接続を開くのではなく、単に既存のプールから 1 つを引き出すことを意味します。またClose
、接続を閉じるのではなく、接続を再利用するために接続プールに戻すだけです。
接続プールはアプリケーションのプロセス内に存在し、接続文字列ごとに存在します。
これらのプロセスを明示的にクリアする必要がありますか?
いいえ、必要なのは、すべてのIDisposable
リソース (接続やコマンドなど) をusing
ステートメントでラップしていることを確認することだけです。この方法では、Close メソッドを明示的に呼び出す必要さえありません。例外が発生した場合でも、コードによってすべてが適切に破棄されます。
string connectionString = ...
using (var conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(reader.GetOrdinal("id"));
Console.WriteLine(id);
}
}
}
于 2013-03-15T07:24:48.703 に答える
0
必ず接続を破棄してください。最善の策は、using() ブロックです。
using ( var con = new SqlConnection("???") )
{
using ( var cmd = con.CreateCommand() )
{
// do SQL with cmd
}
}
于 2013-03-15T07:26:03.163 に答える