我使用OLEDB将数据插入到DB4 .dbf文件中。插入13行需要差不多1分钟,因此只有在插入一个表时才会出现问题,其中包含一个varchar 20,2个日期和一个小数。有没有其他更快的方法来做到这一点?
` 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();
}`
答案 0 :(得分: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();
}
此外,我还尝试将循环包含在数据库事务中。请记住,桌面上的索引太多,不适合插入性能。