c# 批量倒入数据库
http://msdn.microsoft.com/library/azure/dn132615.aspx#why
MSDN上的这个文章不错 ,详细讲述了 大数据量导入的几种方式
目前在我们的项目中用的最多的还是 SQLBulkCopy
插入速度是很快,但是只能是新增数据,不能对要导入的数据进行一些操作 ( 比如我要把当前的数据跟表中的数据进行比对 )
这个问题挺纠结人的还
目前用到了两种方式
1 sqlbulkcopy 批量插入临时表
调用存储过程 数据库内比对 返回重复记录 插入目标表
缺点: 总觉得不妥,每次新建临时表,书写存储过程,还是想在代码里进行比对
2 把表里的数据取出来,在内存里进行过滤比对 然后用 sqlbulkcopy 进行导入
这个对于简单的数据量还是可以的,内存里比对也是非常快的
不过就是得注意几点
从数据库读取比对的数据最好用 datareader 这样读取出数据非常快
数据的集合存入 HaseSet 或者 Dictionary 千万不要用 List 效率太低了
目前我用的是 HaseSet
Dictionary 主要是重复数据抛出异常
在文章里发现了这个参数,这一个好处就是不用新建临时表了
不过就是得在数据库自定义 Type 目前只有 sql2008 支持
如果传入 Table 这个参数,然后存储过程进行一些数据分析 效率还是可以的
1 跟 3 其实差不多 不过效率还没比较过
如果数据量不是很大 用2 还是比较客观的
1就是麻烦了点
浙公网安备 33010602011771号