知识大全 使用SqlBulkCopy进行大批量数据迁移
Posted 知
篇首语:莫问天涯路几重,轻衫侧帽且从容。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用SqlBulkCopy进行大批量数据迁移相关的知识,希望对你有一定的参考价值。
使用SqlBulkCopy进行大批量数据迁移 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
下面我们先通过一个简单的例子说明这个类的使用 DateTime startTime; protected void Button _Click(object sender EventArgs e) startTime = DateTime Now; string SrcConString; string DesConString; SqlConnection SrcCon = new SqlConnection(); SqlConnection DesCon = new SqlConnection(); SqlCommand SrcCom = new SqlCommand(); SqlDataAdapter SrcAdapter = new SqlDataAdapter(); DataTable dt = new DataTable(); SrcConString = ConfigurationManager ConnectionStrings[ SrcDBConnectionString ] ConnectionString; DesConString = ConfigurationManager ConnectionStrings[ DesDBConnectionString ] ConnectionString; SrcCon ConnectionString = SrcConString; SrcCom Connection = SrcCon; SrcCom CommandText = SELECT * From [SrcTable] ; SrcCom CommandType = CommandType Text; SrcCom Connection Open(); SrcAdapter SelectCommand = SrcCom; SrcAdapter Fill(dt); SqlBulkCopy DesBulkOp; DesBulkOp = new SqlBulkCopy(DesConString SqlBulkCopyOptions UseInternalTransaction); DesBulkOp BulkCopyTimeout = ; DesBulkOp SqlRowsCopied += new SqlRowsCopiedEventHandler(OnRowsCopied); DesBulkOp NotifyAfter = dt Rows Count; try DesBulkOp DestinationTableName = SrcTable ; DesBulkOp WriteToServer(dt); catch (Exception ex) finally SrcCon Close(); DesCon Close(); private void OnRowsCopied(object sender SqlRowsCopiedEventArgs args) lblCounter Text += args RowsCopied ToString() + rows are copied ; TimeSpan copyTime = DateTime Now startTime; lblCounter Text += Copy Time: + copyTime Seconds ToString() + + copyTime Milliseconds ToString() + seconds ; 接着具体分析这几行代码 SqlBulkCopy DesBulkOp; DesBulkOp = new SqlBulkCopy(DesConString SqlBulkCopyOptions UseInternalTransaction);先生成SqlBulkCopy 实例 构造函数指定了目标数据库 使用SqlBulkCopyOptions UseInternalTransaction是指迁移动作指定在一个Transaction当中 如果数据迁移中产生错误或异常将发生回滚 其他选项请参考MSDN DesBulkOp BulkCopyTimeout = ; 指定操作完成的Timeout时间 DesBulkOp SqlRowsCopied += new SqlRowsCopiedEventHandler(OnRowsCopied); DesBulkOp NotifyAfter = dt Rows Count; try DesBulkOp DestinationTableName = SrcTable ; DesBulkOp WriteToServer(dt); NotifyAfter属性指定通知通知事件前处理的数据行数 在这里指定为表的行数 并添加SqlRowsCopied事件输出整个迁移过程的时间 WriteToServer方法就是将数据源拷备到目标数据库 在使用WriteToServer方法之前必须先指定DestinationTableName属性 也就是目标数据库的表名 我们还可以自己定义一个Transaction 例如 SqlTransaction Transaction; Transaction = SrcCom Connection BeginTransaction(); SqlBulkCopy DesBulkOp; DesBulkOp = new SqlBulkCopy(new SqlConnection(DesConString) SqlBulkCopyOptions Default Transaction); try // catch finally Transaction Commit(); 另外还有一个SqlBulkCopyColumnMapping类 可以让数据源字段映射到目标数据中命名不同的字段上 也就是说如果目标数据和源数据的列名不同时 可以用这个类进行映射 SqlBulkCopyColumnMapping ColMap = new SqlBulkCopyColumnMapping( SrcCol DesCol ); DesBulkOp ColumnMappings Add(ColMap); 或者可以直接添加映射 DesBulkOp ColumnMappings Add( SrcCol DesCol ); 性能问题 我使用上面的例子测试 迁移了 万条左右的记录 花的时间不到一秒 应改说性能还是不错的 另外 使用SQL Profile监视迁移事件 可以看见请求记录非常少 只有几条而已 据说使用SqlBulkCopy可以大大减少数据迁移的时间 cha138/Article/program/net/201311/11914相关参考
去年年底做了不少系统的数据迁移大部分系统由于平台和版本的原因做的是逻辑迁移少部分做的是物理迁移有一些心得体会与大家分享 首先说说迁移流程在迁移之前写好方案特别是实施的方案步骤一定要写清楚然后进行
Oracle数据库迁移几种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们常常需要对数据进行
Oracle数据库的数据迁移方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 主要介绍了Ora
Oracle中实现数据迁移和数据共享 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 安装在自定义
Oracle数据文件位置迁移 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 操作系统Window
知识大全 PHP将数据从Oracle向Mysql数据迁移实例
PHP将数据从Oracle向Mysql数据迁移实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Oracle统计数据的迁移 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自从iR开始可以利用D
源数据库 expuserid=system/pwd@orclfile=D:\\share\\dbbackup\\whyxdoc_dmplog=d:\\share\\dbbackup\\whyxd
Spring+Hibernate处理大批量数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对
基于ASP.NET的数据迁移方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 引言 近年来国