14

私のDALでは、次のようなクエリを記述します。

using(SQLConnection conn = "connection string here")
{
    SQLCommand cmd = new ("sql query", conn);
    // execute it blah blah
}

今、私はSQLCommandオブジェクトを明示的に閉じていないことに気づきました。これで、「using」ブロックがSQLConnectionオブジェクトを処理することがわかりましたが、これはSQLCommandオブジェクトも処理しますか?そうでなければ、私は深刻な問題を抱えています。数千行のコードでSQLCommandに「using」を挿入するか、数百のメソッドでcmd.Close()を実行する必要があります。コマンドの使用または終了を入力すると、Webアプリのメモリ管理が向上することを教えてください。

4

3 に答える 3

13

SqlConnectionについて認識していないSqlCommandため、単独で閉じる必要があります。

using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
    // execute it blah blah
}
于 2010-07-30T10:01:48.760 に答える
10

いいえ、usingステートメントはコマンドを処理しません。

コマンドをステートメントでラップする必要がありますusing。これにより、コマンドが適切Disposeに呼び出されるためです。

using(SQLConnection conn = 'connection string here')
{
    using(SQLCommand cmd = new ('sql query', conn))
    {
        //execute it blah blah
    }
}
于 2010-07-30T10:02:43.780 に答える
5

は処理されませんがSqlCommand最終的にはガベージ コレクターによって処理されます。私は次のことをする傾向があります:SqlCommand

using (SqlConn conn ... )
using (SqlComm comm ... )
{
    conn.Open();
}

ここで using ステートメントをスタックすると、両方が処理されます。

于 2010-07-30T10:01:53.877 に答える