2013-03-18 76 views
1

我使用OLEDB数据插入到DB4 .dbf文件。插入13行占用几乎1分钟至极被SOOOO隆,在一个表中插入期间只有ACCUR泰斯的问题,即含有一个varchar 20,2日期和小数。有没有其他更快的方法来做到这一点?DBF文件插入需要很长时间

` 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

显示你的插入代码 – Alex 2013-03-18 15:05:53

+0

我用一个DataTable来启动数据,然后我用数据行加一个foreach dataRow – SKGeek 2013-03-18 15:08:51

+0

我想,这个数据库有些问题,它不应该花那么长的时间。尽量让一步一步的调试,看看时间,每个操作需要。并尝试使用所有13个插入进行组合文本查询,并查看结果 – Alex 2013-03-18 15:30:34

回答

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

另外,我也会尝试将循环包含在数据库事务中。请记住,桌上太多索引对插入性能不利。

+0

谢谢Lot,这种插入方式比以前更快 – SKGeek 2013-03-18 16:20:03