C# 利用 SqlBulkCopy 提交

最近要迁移数据,一个老版本的数据迁移到新版本的数据库中,字段、配置、参数什么的完全不一样。

纠结啊,写代码估计只花了1/5的时间,对字段参数这些简直是惨不忍睹啊。。。还算比较清楚结构的我,都已经无语了。

 

最后遇到SqlBulkCopy各种问题

以前封装好的方法只有单独一个表添加,调用了几次方法,经常出现此 SqlTransaction 已完成;它再也无法使用。

好吧,我改。。。

using (SqlTransaction st = conn.BeginTransaction())

{

using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, st))
                        {
                            copy.DestinationTableName = TableName;
                            copy.WriteToServer(Table);
                        }

N个。。。。

}

多表一起提交,然后又导致超时,哎。。。完全跑不了。。。再改吧,把数据比较大的那张表,分开提交

using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, st))
                        {
                            copy.BulkCopyTimeout = 120;
                            copy.BatchSize = 100;
                            copy.NotifyAfter = 100;

                            copy.SqlRowsCopied += new SqlRowsCopiedEventHandler((object sender, SqlRowsCopiedEventArgs e) =>
                            {
                                Console.WriteLine("完成100行");
                            });

                            copy.DestinationTableName = 大表.TableName;
                            copy.WriteToServer(大表);
                        }

 

其实吧,这个表也就不到4千万数据,按理说不应该这么吧,可能是我们服务器太差了,也可能是索引太多了,他们给出的复杂查询,完全不考虑性能的,只为了写程序方便简单,最后就坑的就是哥们了。。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值