c#中往mysql里批量插入上万条数据,有比较高效的方法吗?谢谢
小弟之前都没遇到过一下子插入几万条数据的问题。刚遇到这个问题在往上查到一篇文章,其中说到“IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了。....”
还给出了一段代码,如下
public interface IBatcherProvider : IProviderService
{
/// <summary>
/// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。
/// </summary>
/// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param>
/// <param name="batchSize">每批次写入的数据量。</param>
void Insert(DataTable dataTable, int batchSize = 10000);
}
我复制到vs2010下,直接提示找不到IProviderService 这个东西缺少命名空间,上网查了很久都不知道IProviderService是什么东西。是需要引入什么库吗?我项目中已经引入了MySql.Data.dll
一次性插入上万条,我估计循环插入10000次会很慢吧?有点想全部写成一条mysql语句,那这个语句异常的长,这样效率高吗?
比如
INSERT INTO TABLES (LABLE1,LABLE2,LABLE3,...)
VALUES(NUM11,NUM12,NUM13,...),
(NUM21,NUM22,NUM23,...),
....
(NUMn1,NUMn2,NUMn3,..);
谢谢!!
------解决方案--------------------对于mysql用事务操作,一次性插入,效率明显提升。
cmd.CommandText="sql语句";
cmd.ExeucteNonQuery();
反复执行上面2句,连接不要关。
------解决方案--------------------我觉得LINQ插入可能会高效一点
如果不考虑并发,倒是可以多线程LNGQ
最后检测完整性,遗漏通过自设自增字段就能检查到,补上就好
------解决方案--------------------BULK INSERT (Transact-SQL) :http://technet.microsoft.com/zh-cn/library/ms188365(v=sql.90).aspx
------解决方案--------------------
既然没有抛出异常,你怎么知道没有成功?
另外,每当执行1000条DBCommand就提交(Commit)事务,然后再次开启事务,这样比较好。把过多的命令放在一个事务中,一旦超过物理内存分配限制,你的程序会变得很慢很慢。