c# 批量倒入数据库

http://msdn.microsoft.com/library/azure/dn132615.aspx#why

 

MSDN上的这个文章不错 ,详细讲述了 大数据量导入的几种方式

目前在我们的项目中用的最多的还是 SQLBulkCopy

插入速度是很快,但是只能是新增数据,不能对要导入的数据进行一些操作 ( 比如我要把当前的数据跟表中的数据进行比对 )

这个问题挺纠结人的还

目前用到了两种方式

1 sqlbulkcopy 批量插入临时表

   调用存储过程 数据库内比对 返回重复记录 插入目标表

缺点: 总觉得不妥,每次新建临时表,书写存储过程,还是想在代码里进行比对

 

2  把表里的数据取出来,在内存里进行过滤比对 然后用 sqlbulkcopy 进行导入

这个对于简单的数据量还是可以的,内存里比对也是非常快的

不过就是得注意几点

从数据库读取比对的数据最好用 datareader 这样读取出数据非常快

数据的集合存入 HaseSet 或者 Dictionary  千万不要用 List 效率太低了

目前我用的是 HaseSet 

Dictionary 主要是重复数据抛出异常

3  Table-Valued Parameters 

在文章里发现了这个参数,这一个好处就是不用新建临时表了

不过就是得在数据库自定义 Type  目前只有 sql2008 支持

如果传入 Table 这个参数,然后存储过程进行一些数据分析 效率还是可以的

 

1 跟 3 其实差不多 不过效率还没比较过

如果数据量不是很大  用2 还是比较客观的 

1就是麻烦了点

posted on 2014-04-02 14:42  havid  阅读(704)  评论(0)    收藏  举报

导航