0

asp.net でデータ バインドされたコントロールを操作する場合、すべてが適切に破棄されていることを確認するための適切なパターンはありますか?

これが私がこれまでに持っているものです:

        using (var conn = New SqlConnection("connectionString"))
        using (var cmd = conn.CreateCommand())
        {
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "myProc";

            conn.Open();
            using (var rdr = cmd.ExecuteReader())
            {
                gridview1.DataSource = rdr;
                gridview1.DataBind();
            }
        }

データリーダー/コマンド/接続を閉じる必要がありますか? それとも、using ステートメントがこれを自動的に処理しますか? それとも、データバインドされたコントロールを使用する場合により良いパターンがあるのでしょうか?

4

3 に答える 3

1

ステートメント呼び出しを使用'using'すると、メソッド自体が破棄されるため、メソッドを処理する必要はありません。ただし、次のいずれかを使用できます。

  1. ページングと並べ替えを有効にする場合は、最初にデータをDataTableにロードしてから、次のように接続とリーダーを閉じる必要があります。

     var rdr=cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(rdr);
        rdr.Close();
        gridview1.DataSource = dt;
        gridview1.DataBind();
    
  2. ページングと並べ替えを有効にしたくない場合は、データをgridviewにバインドし、次のようにgridviewに読み込んだ後にリーダーを閉じることができます。

         gridview1.DataSource = rdr;
         gridview1.DataBind();
         rdr.Close();
    
于 2012-07-13T10:22:43.923 に答える
1

あなたのコードは正しいようです。可能な変更は次のとおりです。

  1. CreateCommand を使用する場合、接続をコマンドに関連付ける必要はありません
  2. CommandBehavior.CloseConnectionaを ExecuteReaderに追加します (usingステートメントの流れでは必要ありません) 。

しかし、それらは本当に小さなことです。

于 2012-07-13T10:14:03.613 に答える
1

usingステートメントを使用する場合、オブジェクトの破棄に注意する必要はありません。usingステートメントはdispose()、Dispose が呼び出されるとすぐにオブジェクト自体がスコープ外になるように、finally ブロックでメソッドを呼び出します。

于 2012-07-13T10:11:16.617 に答える