如果要批量复制大量的数据,用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 data redis 理解

    前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...

  2. redis Web服务器

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  3. Spring Boot Favicon配置

    http://blog.csdn.net/xiaolyuh123/article/details/72403226

  4. 使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket

    http://blog.csdn.net/timliang18601860/article/details/7104485

  5. Linux时间子系统之一:认识timer_list和timer_stats和使用

    内核版本:v3.4.xxx 一.前言 内核提供了方便查看当前系统TickDevice.活动的Timer列表以及Timer使用的统计信息. 内核分别用两个节点来表示TimerList和Timer统计信息 ...

  6. Spring Batch 专题

    如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...

  7. AbstractRoutingDataSource实现动态数据源切换 专题

    需求:系统中要实现切换数据库(业务数据库和his数据库) 网上很多资料上有提到AbstractRoutingDataSource,大致是这么说的 在Spring 2.0.1中引入了AbstractRo ...

  8. const命令,全局变量的属性,变量的解构赋值

    const命令 1:声明常量(只在当前代码块中有效)---注意声明的常量可以是对象,但是常量储存的是对象的地址,地址声明后不可变,但是可以给常量对象添加属性 全局变量的属性 1:window和glob ...

  9. awk的递归

    想来惭愧,之前写的一篇文章<用awk写递归>里多少是传递里错误的信息.虽然那篇文章目的上是为了给出一种思路,但实际上awk是可以支持函数局部变量的. awk对于局部变量的支持比起大多数过程 ...

  10. centos7 安装qt

    /出现can't find lGL,安装下面的库: yum install libGL yum install libGL-devel ​