3
for (int i = 0; i < purchaseListView.Items.Count; i++)
Connection con = new Connection();
                 SqlCommand cmd = new SqlCommand();
                 SqlCommand cmdFifo = new SqlCommand();
                 con.OpenConnection();
                 cmd.Connection = con.DataBaseConnection;
                 cmd.CommandType = CommandType.StoredProcedure;
                 cmd.CommandText = "insertDetail";
                 cmdFifo.Connection = con.DataBaseConnection;
                 cmdFifo.CommandType = CommandType.StoredProcedure;
                 cmdFifo.CommandText = "insertInToMain";

これは私のコードであり、ループがソフトウェアのパフォーマンスに影響するかどうか、およびこれがループでストアド プロシージャを呼び出す正しい方法であるかどうかを知りたいです。

プロシージャをクラスに保存しました。保存ボタンがクリックされたときにフォームから呼び出し、同じストアド プロシージャを介してデータベースに 10 個のアイテムを挿入したいと考えています。

4

4 に答える 4

0

テーブルを作成し、すべての入力を反復してデータ全体を挿入することをお勧めします。つまり、単一のストアドプロシージャを作成してみてください。for ループを複数回実行するのは非効率的です。また、データベースが結果セットを何度も生成するため、ネットワーク オーバーヘッドのためにパフォーマンスにも影響します。

于 2013-03-15T15:32:16.990 に答える
0

非常に非効率的なアイテムごとに新しい接続オブジェクトを作成しています。

n接続オブジェクトを 1 つ作成し、製品の詳細を使用してストアド プロシージャを実行します。または、ストアド プロシージャを作成して 10 個のアイテムを受け入れ、そのレベルでデータを挿入します。

これをループの外に移動します (新しいインスタンスを作成せずにループ内にconアクセスできます:cmd

  Connection con = new Connection();
  SqlCommand cmd = new SqlCommand();
  con.OpenConnection();
  cmd.Connection = con.DataBaseConnection;
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.CommandText = "insertDetail";

cmdループ内で、すべてのパラメーターをオブジェクトに追加できます。

 cmd.Parameters.Add("@Item", SqlDbType.Int);
 cmd.Parameters["@Item"].Value = purchaseListView.Items[i];
 cmd.ExecuteNonQuery();
于 2013-03-15T15:25:59.583 に答える
0

さて、あなたは 10 個の接続を開いていますが、それらを閉じていないように見えるので、接続が不足する可能性がありますが、それはコード全体ではないと推測しています。

于 2013-03-15T15:27:48.070 に答える
0

ループの前に接続とストアド プロシージャを設定し、ループ内でコマンド パラメータ値と exec のみを更新する必要があります。このような:

Connection con = new Connection();
SqlCommand cmd = new SqlCommand();
SqlCommand cmdFifo = new SqlCommand();
con.OpenConnection();
cmd.Connection = con.DataBaseConnection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "insertDetail";
cmd.Parameters.Add("@Item", SqlDbType.Int); 
cmdFifo.Connection = con.DataBaseConnection;
cmdFifo.CommandType = CommandType.StoredProcedure;
cmdFifo.CommandText = "insertInToMain";
//now that your connections & commands are set up, you can reuse them within the loop
for (int i = 0; i < purchaseListView.Items.Count; i++)
{
    //ToDo:assign any SP parameter values
    cmd.Parameters["@Item"].Value = purchaseListView.Items[i]; 
    // ...

    //then exec within the loop
    cmd.ExecuteNonQuery();
    cmdFifo.ExecuteNonQuery();
}
于 2013-03-15T15:27:59.403 に答える