1

データベース コマンドを C# で次のように記述します。

 using (SqlConnection con = new SqlConnection(Config.ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("INSERT INTO ProjectDetails(pro_name,pro_location,pro_briefdesc,pro_desc,pro_res,pro_contact,pro_add,pro_email,pro_phone) VALUES (@name,@loc,@brief,@desc,@res,@cont,@add,@email,@ph)", con))
            {
                cmd.Parameters.AddWithValue("@name",pro_name);
                cmd.Parameters.AddWithValue("@loc",pro_location );
                cmd.Parameters.AddWithValue("@brief",pro_briefdesc);
                cmd.Parameters.AddWithValue("@desc", pro_desc);
                cmd.Parameters.AddWithValue("@res",pro_res);
                cmd.Parameters.AddWithValue("@cont",pro_contact);
                cmd.Parameters.AddWithValue("@add",pro_add);
                cmd.Parameters.AddWithValue("@email",pro_email);
                cmd.Parameters.AddWithValue("@ph",pro_phone );
                con.Open();
                int modified = cmd.ExecuteNonQuery();
                if (con.State == System.Data.ConnectionState.Open) con.Close();
                return modified;

            }

        }

接続を開いて閉じて一般的に書くにはどうすればよいですか - つまり、コードの繰り返し (重複) を最小限に抑えます。

4

2 に答える 2

5

-statement を使用usingすると、 から閉じられるため、接続を閉じる必要はありませんDispose

using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("INSERT INTO ProjectDetails(pro_name,pro_location,pro_briefdesc,pro_desc,pro_res,pro_contact,pro_add,pro_email,pro_phone) VALUES (@name,@loc,@brief,@desc,@res,@cont,@add,@email,@ph)", con))
    {
        cmd.Parameters.AddWithValue("@name",pro_name);
        // ...
        con.Open();
        int modified = cmd.ExecuteNonQuery();
        //con.Close(); <-- not necessary
        return modified;
    }
}
于 2013-06-19T13:26:00.080 に答える
1

あなたのコードは問題なく、接続が開かれたり閉じられたりする頻度を気にする必要はありません。

ADO.NET は接続プールを使用して空き接続を再利用し、以前の接続がすべて使用されている場合にのみ新しい接続を作成します。これにより、次の理由により、パフォーマンスが桁違いに向上します。

  • 実際のサーバー接続の開閉にかかる費用はかかりません
  • 実際の接続がまだ存在していても、接続を破棄すると、残りのサーバー ロックは解放されます。これは、デッドロックと待機が少なくなることを意味します。

実際、必要になる直前に接続を開き、使い終わったらすぐに破棄するのは非常に良いことです。

これは新しい機能ではありません。それは ADO と OLE DB にまでさかのぼります。

最後に、ほとんどの ADO.NET および OLE DB プロバイダーの接続文字列パラメーターを使用して、プールに保持される接続の最小数と最大数を制御できます。これは、サーバー アプリケーションで非常に役立ちます。

最小数を設定することで、新しいリクエストが入ってきたときに新しい接続を開く時間を無駄にすることなく、アプリケーションが通常の負荷を処理するのに十分な接続を確保できるようになります。最大数を設定すると、クライアントが最終的に待機するほど多くのサーバー ロックを取得しないようになります。ほとんどの場合、お互い。

于 2013-06-19T13:37:38.763 に答える