dbf文件插入需要很长时间 [英] dbf file insertion Take a long Time

查看:108
本文介绍了dbf文件插入需要很长时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用OLEDB将数据插入到DB4 .dbf文件中。插入13行需要差不多1分钟,因此只有在插入一个表时才会出现问题,其中包含一个varchar 20,2个日期和一个小数。有没有其他更快的方法可以做到这一点?

这里是一些代码示例



I use OLEDB to insert data to a DB4 .dbf file. Inserting 13 row takes almost 1 minute wich is soooo loong, theis problem only accur during insertion in one table , that contain a varchar 20 , 2 dates and a decimal. Is there any alternative faster ways to do this?
here is some code samples

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

推荐答案

尝试更改设置命令的方式以使用已准备好的sql



请参阅 http: //msdn.microsoft.com/en-GB/library/system.data.oledb.oledbcommand.prepare.aspx [ ^ ]



除了制作使用(完全)参数化查询更高效的东西也有助于防止sql注入







Try changing the way you are setting up your command to use prepared sql

see http://msdn.microsoft.com/en-GB/library/system.data.oledb.oledbcommand.prepare.aspx[^]

Apart from making things more performant using (fully) parameterised queries will also help protect against sql injection



cmd.CommandText = @"insert into fstathote values (?,?,?,?,?)
foreach (DataRow row in fstathotel.Rows)
     cmd.Parameters.AddWithValue("mpehotel", Convert.ToInt32(row["mpehotel"]));
     cmd.Paremeters.AddWithValue("date", Convert.ToDateTime(row["date"]));
     cmd.Parameters.AddWithValue("type", row["type"].ToString());
     cmd.Parameters.AddWithValue("value", Decimal.Parse(row["value"].ToString())); // parmSlot1 in your code
     cmd.Parameters.AddWithValue("edate", Convert.ToDateTime(row["edate"]));
     cmd.ExecuteNonQuery();


问题是我在looop中有cmd.Parameters.AddWithValue表示参数每次迭代都会添加。



The problem was that I have cmd.Parameters.AddWithValue in the looop wish means a parameter is added at each iteration.

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


这篇关于dbf文件插入需要很长时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆