日期:2014-05-17  浏览次数:20517 次

SqlBulkCopy 的使用问题。
程序要进行的大数据量的更新或者插入,以前使用的是SqlDataAdapter的update来实现的。
现在为了提高效率,想使用SqlBulkCopy 的WriteToServer来实现。

有以下问题咨询一下大家。
1,WriteToServer相比SqlDataAdapter的update,有什么缺点?或者使用的注意事项?
2,WriteToServer更新时,如果其中一条数据有问题,更新失败,是不是所有的数据都不更新?
3,WriteToServer还能知道更新了多少条数据啊?类似update的返回值。

谢谢回答了,万分感谢
SqlBulkCopy?

------解决方案--------------------
帮顶一下 没用过WriteToServer
------解决方案--------------------
没尝试过,顶一下,期待高手
------解决方案--------------------
1、效率确实高。一般导入的时候很好用。
2、要跟后台数据源的里面的列名一一匹配就好了。,有一条失败,前面的会插进去的。
3、没有带返回值的方法。。。(要知道插入了多少,通常都在查一次吧。。)
应该是我之前写的 就是为了纯粹导入,很多地方没有判断,处理不够吧

------解决方案--------------------
之前搞错了。最近又看了下
1、new sqlbulkcopy的时候,里面有重载方法,可以使用事物。
SqlBulkCopyOptions.UseInternalTransaction 这是个枚举

2.
sqlbulk.SqlRowsCopied +=new SqlRowsCopiedEventHandler(OnRowsCopied)

可以添加事件
 private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)

args里面就能取到受影响行数


------解决方案--------------------
第二条可以用上数据库的事物,要么全做要么全部做,这样就能解决插入一半报错的问题,很好用的,之后再做数据验证,这样可以
------解决方案--------------------
SqlBulkCopy.WriteToServer 方法 
将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。

参考:
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy.writetoserver.aspx