dbf文件插入需要很长时间

时间:2013-03-18 15:03:49

标签: c# oledb dbf

我使用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();
            }`

1 个答案:

答案 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();
}

此外,我还尝试将循环包含在数据库事务中。请记住,桌面上的索引太多,不适合插入性能。