批量数据复制SqlBulkCopy使用经验点滴(特别是超时处理)
如果要批量复制大量的数据,用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万条数据,打印一个+符号到屏幕上。
(不知道ul-li 列表为啥会变成窄窄的小段落,没办法了)
批量数据复制SqlBulkCopy使用经验点滴(特别是超时处理)的更多相关文章
- sqlServer MERGE 对数据进行修改或插入自动视别 特别用于批量数据的插入或修改
sqlServer MERGE 对数据进行修改或插入自动视别 特别用于批量数据的插入或修改 MERGE customer AS targetTable --目标表 USING ( ...
- 【批量添加】-SqlBulkCopy语句 标签: sql批量添加 2015-12-20 14:39 1367人阅读 评论(33)
上篇博客我们介绍了通过拼接sql字符串的方法来对sql数据库进行批量添加,但是通过语句拼接insert语句有个缺点,就是每次最多只能添加1000条.当时我们另外一个界面也用到了批量添加,但是这个界面轻 ...
- C#利用SqlDataAdapte对DataTable进行批量数据操作
C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...
- BDC、CATT批量数据维护
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...
- 基于Tablestore Tunnel的数据复制实战
前言 数据复制主要指通过互联的网络在多台机器上保存相同数据的副本,通过数据复制方案,人们通常希望达到以下目的:1)使数据在地理位置上更接近用户,进而降低访问延迟:2)当部分组件出现故障时,系统依旧可以 ...
- Mysql 函数定义及批量数据脚本
零.说在前面 在定义函数之前 需要先将 log_bin_trust_function_creators 值设为开启,原因如下 在主从复制的两台Mysql服务器中,slaver会从master复制数据, ...
- 万字详解 TDengine 2.0 数据复制模块设计
导读:TDengine分布式集群功能已经开源,集群功能中最重要的一个模块是数据复制(replication),现将该模块的设计分享出来,供大家参考.欢迎大家对着设计文档和GitHub上的源代码一起看 ...
- Salesforce Integration 概览(四) Batch Data Synchronization(批量数据的同步)
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 前两篇博客讲了一下 ...
随机推荐
- spring data redis 理解
前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...
- redis Web服务器
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Spring Boot Favicon配置
http://blog.csdn.net/xiaolyuh123/article/details/72403226
- 使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket
http://blog.csdn.net/timliang18601860/article/details/7104485
- Linux时间子系统之一:认识timer_list和timer_stats和使用
内核版本:v3.4.xxx 一.前言 内核提供了方便查看当前系统TickDevice.活动的Timer列表以及Timer使用的统计信息. 内核分别用两个节点来表示TimerList和Timer统计信息 ...
- Spring Batch 专题
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- AbstractRoutingDataSource实现动态数据源切换 专题
需求:系统中要实现切换数据库(业务数据库和his数据库) 网上很多资料上有提到AbstractRoutingDataSource,大致是这么说的 在Spring 2.0.1中引入了AbstractRo ...
- const命令,全局变量的属性,变量的解构赋值
const命令 1:声明常量(只在当前代码块中有效)---注意声明的常量可以是对象,但是常量储存的是对象的地址,地址声明后不可变,但是可以给常量对象添加属性 全局变量的属性 1:window和glob ...
- awk的递归
想来惭愧,之前写的一篇文章<用awk写递归>里多少是传递里错误的信息.虽然那篇文章目的上是为了给出一种思路,但实际上awk是可以支持函数局部变量的. awk对于局部变量的支持比起大多数过程 ...
- centos7 安装qt
/出现can't find lGL,安装下面的库: yum install libGL yum install libGL-devel