1

OLEDBを使用して、DB4.dbfファイルにデータを挿入します。13行の挿入には、非常に長い1分近くかかります。この問題は、varchar 20、2の日付、および小数を含む1つのテーブルへの挿入中にのみ発生します。これを行うための代替のより速い方法はありますか?

 foreach (DataRow row in fstathotel.Rows)
            {
                cmd.CommandText = @"insert into fstathote values (" + Convert.ToInt32(row["mpe"]) + ",'" + Convert.ToDateTime(row["date"]) + "','" + row["type"].ToString() + "',?,'" + Convert.ToDateTime(row["edate"]) + "')";
                cmd.Parameters.AddWithValue("parmSlot1", Decimal.Parse(row["value"].ToString()));
                cmd.ExecuteNonQuery();
            }
4

1 に答える 1

2

あなたはcmd.Parameters.AddWithValueループでやっています。

これは、各反復でパラメーターが追加されることを意味します。DB4についてはわかりませんが、OleDBドライバーは、追加の未使用パラメーターを可能な限り処理しようとしているに違いありません。成功しますが、操作に時間がかかります。

このように挿入cmd.Parameters.Clear()して、状況が改善されているかどうかを確認してください。

foreach (DataRow row in fstathotel.Rows)
{
    cmd.CommandText = @"insert into fstathote values (" + Convert.ToInt32(row["mpe"]) + ",'" + Convert.ToDateTime(row["date"]) + "','" + row["type"].ToString() + "',?,'" + Convert.ToDateTime(row["edate"]) + "')";
    cmd.Parameters.Clear(); // Clear the parameter list 
    cmd.Parameters.AddWithValue("parmSlot1", Decimal.Parse(row["value"].ToString()));
    cmd.ExecuteNonQuery();
}

さらに、データベーストランザクションでループを囲むことも試みます。テーブルのインデックスが多すぎると、挿入のパフォーマンスが低下することに注意してください。

于 2013-03-18T16:00:09.690 に答える