当前位置: 首页 > news >正文

.net利用SQLBulkCopy进行数据库之间的大批量数据传递

SQLBulkCopy,用于数据库之间大批量的数据传递。通常用于新,旧数据库之间数据的更新。即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来。

 

首先,SQLBulkCopy需要2个连接。分别连接到不同的旧表所在的数据库,新表所在的数据库。如果是同一个数据库,就可以用同一个SqlConnection对象。

其次,我们要从旧数据库中,把导出的字段读取出来。用什么读呢?可以用Datatable,也可以用SqlDataReader。因为SqlDataReader不占用内存,对大批量的数据复制,不需要事先导入到系统。所以就用SqlDataReader了。

 

读出后,设定对应关系,设定目标表名,写入。就这么简单。速度非常快!

 

初始化Connection对象

SqlConnection ConnectionNew=new SqlConnection("连接信息");

SqlConnection ConnectionOld=new SqlConnection("连接信息");

 

            try
            {

//1.在旧表中,用SqlDataReader读取出信息
                SqlCommand cmd = new SqlCommand(SQL, ConnectionOld);
                sdr = cmd.ExecuteReader();

 

//2.初始化SqlBulkCopy对象,用新的连接作为参数。
                SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnectionNew);

 

//3.写对应关系。如旧表的People列的数据,对应新表Human列,那么就写bulkCopy.ColumnMappings.Add("People","Human")

//如果两张表的结构一样,那么对应关系就不用写了。

//我是用哈希表存储对应关系的,哈希表作为参数到传入方法中,key的值用来存储旧表的字段名,VALUE的值用来存储新表的值
                foreach (string str in HTDuiYing.Keys)
                {
                    bulkCopy.ColumnMappings.Add(str, HTDuiYing[str].ToString());
                }

 

//4.设置目标表名
                bulkCopy.DestinationTableName = TableNmae;

//额外,可不写:设置一次性处理的行数。这个行数处理完后,会激发SqlRowsCopied()方法。默认为1
                bulkCopy.NotifyAfter = 10;

//额外,可不写:设置激发的SqlRowsCopied()方法,这里为bulkCopy_SqlRowsCopied
                bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);

//OK,开始传数据!
                bulkCopy.WriteToServer(sdr);
                
            }

 

 

//激发的方法写在外头

         private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
        {
            执行的内容。

            这里有2个元素值得拿来用

            e.RowsCopied,返回数值类型,表示当前已经复制的行数

            e.Abort,用于赋值true or false,用于停止赋值的操作 
        }

转载于:https://www.cnblogs.com/lgx5/p/6409950.html

相关文章:

  • 快速理解 session/token/cookie 认证方式
  • Pivot Table系列之展开/折叠用法 (Expand/Collapse)
  • hadoop 中什么是slots
  • 构建NCBI本地BLAST数据库 (NR NT等) | blastx/diamond使用方法 | blast构建索引 | makeblastdb...
  • 在一个公司待上多久跳槽最合适?
  • MySQLMySql免安装版安装配置
  • C# Json.Net解析实例
  • 第三方模拟器连接Android studio
  • 什么是TKinter
  • POJ3254 Corn Fields
  • CSS颜色大全
  • Elasticsearch之IKAnalyzer的过滤停止词
  • ubuntu 14.04 安装jdk 1.8
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • js 获取图片url的Blob值并预览
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【React系列】如何构建React应用程序
  • 2017 前端面试准备 - 收藏集 - 掘金
  • AWS实战 - 利用IAM对S3做访问控制
  • ECMAScript6(0):ES6简明参考手册
  • EOS是什么
  • Java IO学习笔记一
  • JavaScript的使用你知道几种?(上)
  • Mysql5.6主从复制
  • nodejs调试方法
  • SQLServer之索引简介
  • v-if和v-for连用出现的问题
  • vue-cli在webpack的配置文件探究
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里云Kubernetes容器服务上体验Knative
  • 初识 beanstalkd
  • 软件开发学习的5大技巧,你知道吗?
  • 手写一个CommonJS打包工具(一)
  • 算法---两个栈实现一个队列
  • 新手搭建网站的主要流程
  • ​flutter 代码混淆
  • #1015 : KMP算法
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $.ajax()
  • (02)Hive SQL编译成MapReduce任务的过程
  • (42)STM32——LCD显示屏实验笔记
  • (笔试题)分解质因式
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (原)本想说脏话,奈何已放下
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .cfg\.dat\.mak(持续补充)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /bin、/sbin、/usr/bin、/usr/sbin
  • ;号自动换行
  • @Bean, @Component, @Configuration简析
  • @EnableAsync和@Async开始异步任务支持