如果要批量复制大量的数据,用ado.net或者其他orm框架逐条读取并写入,有时会耗时太长,满足不了要求,此时SqlBulkCopy就可以出来大显身手了,相信许多人了解或使用过它。

  但实际使用时,还是会遇上些问题,这里做些记录,也许能帮你避开一些“坑”。

  • column mapping 问题 。 在设置column时候,请注意字段的大小写,特别是sql server,平时写sql语句时候可以忽略大小写,但是在这里一定要注意大小写不能错了。
  • 如果目标表中字段比源表中的短,那么源表中有记录的实际数据长度超过目标表的字段,拷贝时会保存,此时检查一下字段长度即可。
  • 超时问题,有时候数据量大时,会遇上错误“在操作完成之前超时时间已过或服务器未响应”。可以设置SqlBulkCopy.BulkCopyTimeout  ,这个属性的单位是秒,默认是30秒。
  • 如果数据量实在大,建议设置SqlBulkCopy.BatchSize 属性,默认是0,即将所有目标数据一股脑儿拷贝到目标表,设置了这个属性,就分批拷贝。 如果设置了batchsize,假设10万条记录,需要10分钟拷贝,timeout要设置超过10分钟,如果设置batchsize=1万,每次只要1分钟,那么timeout只要大于1分钟就可以了。timeout和batch的关系, 微软文档中没有讲明白,经过我的测试,确认timeout是每个batch的时间。
  • SqlRowsCopied 事件。假设拷贝的时间很长,而急性子的你希望能看到目前拷贝了多少数据,就可以使用这个事件,直接来段代码吧
sqlbulkcopy.NotifyAfter = ;
sqlbulkcopy.SqlRowsCopied += new SqlRowsCopiedEventHandler((object sender,SqlRowsCopiedEventArgs e) =>
{
Console.Write("+");
});
 

以上代码的效果是,每1万条数据,打印一个+符号到屏幕上。

参考网址:https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqlbulkcopy?view=netframework-4.7.2

(不知道ul-li 列表为啥会变成窄窄的小段落,没办法了)

批量数据复制SqlBulkCopy使用经验点滴(特别是超时处理)的更多相关文章

  1. sqlServer MERGE 对数据进行修改或插入自动视别 特别用于批量数据的插入或修改

    sqlServer MERGE   对数据进行修改或插入自动视别 特别用于批量数据的插入或修改    MERGE  customer AS targetTable   --目标表    USING ( ...

  2. 【批量添加】-SqlBulkCopy语句 标签: sql批量添加 2015-12-20 14:39 1367人阅读 评论(33)

    上篇博客我们介绍了通过拼接sql字符串的方法来对sql数据库进行批量添加,但是通过语句拼接insert语句有个缺点,就是每次最多只能添加1000条.当时我们另外一个界面也用到了批量添加,但是这个界面轻 ...

  3. C#利用SqlDataAdapte对DataTable进行批量数据操作

    C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...

  4. BDC、CATT批量数据维护

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

    原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...

  6. 基于Tablestore Tunnel的数据复制实战

    前言 数据复制主要指通过互联的网络在多台机器上保存相同数据的副本,通过数据复制方案,人们通常希望达到以下目的:1)使数据在地理位置上更接近用户,进而降低访问延迟:2)当部分组件出现故障时,系统依旧可以 ...

  7. Mysql 函数定义及批量数据脚本

    零.说在前面 在定义函数之前 需要先将 log_bin_trust_function_creators 值设为开启,原因如下 在主从复制的两台Mysql服务器中,slaver会从master复制数据, ...

  8. 万字详解 TDengine 2.0 数据复制模块设计

    ​导读:TDengine分布式集群功能已经开源,集群功能中最重要的一个模块是数据复制(replication),现将该模块的设计分享出来,供大家参考.欢迎大家对着设计文档和GitHub上的源代码一起看 ...

  9. Salesforce Integration 概览(四) Batch Data Synchronization(批量数据的同步)

    本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 前两篇博客讲了一下 ...

随机推荐

  1. spring 切入点表达式

    spring表达式有多种的指示符,如: 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: exe ...

  2. java线程间通信之通过管道进行通信

    管道流PipeStream是一种特殊的流,用于在不同线程间直接传送数据,而不需要借助临时文件之类的东西. jdk中提供了四个类来使线程间可以通信: 1)PipedInputStream和PipedOu ...

  3. php-msf 源码解读【转】

    php-msf: https://github.com/pinguo/php-msf 百度脑图 - php-msf 源码解读: http://naotu.baidu.com/file/cc7b5a49 ...

  4. Linux时间子系统之三:jiffies

    1. jiffies背景介绍 jiffies记录了系统启动以来,经过了多少tick. 一个tick代表多长时间,在内核的CONFIG_HZ中定义.比如CONFIG_HZ=200,则一个jiffies对 ...

  5. YII框架CGridView分页实现

    C控制器层 $model = new User('search'); $model->unsetAttributes(); $dataProvider = $model->search() ...

  6. 详解Linux文档属性、拥有者、群组、权限、差异

    写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人的隐私和工作环境,针对某一个文档(文 ...

  7. MongoDB中级---->关联多表查询

    http://www.linuxidc.com/Linux/2011-08/41043.htm DBRef is a more formal specification for creating re ...

  8. Offcie2013 无法显示 Aurora解决方法

    问题:安装Office2013和Aurora后,Word菜单栏中无Aurora 原因:aurora安装目录中缺失office.dll,word2013未加载COM文件office.dll和模板文件wo ...

  9. Python爬虫进阶六之多进程的用法

    前言 在上一节中介绍了thread多线程库.python中的多线程其实并不是真正的多线程,并不能做到充分利用多核CPU资源. 如果想要充分利用,在python中大部分情况需要使用多进程,那么这个包就叫 ...

  10. rename.go

    {         if err != nil {             return err         }         return syscall.EINVAL     }     r ...