0

私の更新コード:

 for (int i = this.MedaxilGridView1.CurrentCell.RowIndex; i < this.MedaxilGridView1.RowCount; i++)
 {
     // KartsifarishiGridView-dən id götürüb ona uyğun sorğumuzu yazırıq.
     sqlSorgu = "UPDATE customer set medaxil_status = '0' WHERE id = " + 
                 this.MedaxilGridView1.Rows[i].Cells["id"].Value;
     //Sorğunu icra edirk.
     Program.esas.sqlSorguCommand.CommandText = sqlSorgu;
     Program.esas.sqlSorguCommand.Connection = Program.esas.bazayaQosul;
     Program.esas.sqlSorguCommand.ExecuteNonQuery();
     MedaxilGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Empty;

 }

行数: 18286

このバージョンは 5 分かかります

どうすれば速くなりますか?

4

3 に答える 3

1

IDを抽出し、それを更新に直接使用するために使用するクエリを検討する必要があるため、データベースを1回呼び出します。

"UPDATE customer set medaxil_status = '0' WHERE id in (select xxx xxx xxx)"

すべての行を更新する場合は、where句を削除して、ステートメントを1回だけ呼び出します。IDリストしかない場合は、alwais IN句を使用して呼び出しをチャンク化すると、クエリの数が減り、全体的な実行時間が短縮される可能性があります。

于 2012-06-19T07:10:50.110 に答える
0

ループを Transaction で囲もうとしましたか? これにより、MS Access の更新操作が高速化されます。

C# で MS Access トランザクションを使用する方法を示すこのサンプルをご覧ください。

于 2012-06-19T07:28:54.193 に答える
0

そのために使用できますBeginExecuteNonQuery。これにより、1 つの接続を開き、すべてのクエリをバッチ実行することで、接続開始のオーバーヘッドを節約できます。

MSDN の完全な例は、ここにあります。

さらに、 SQL パラメータの使用を開始することをお勧めします。

于 2012-06-19T07:07:38.070 に答える