在asp.net 2.0中使用SqlBulkCopy类迁移数据

在asp.net 2.0中使用SqlBulkCopy类迁移数据 (转)

http://jackyrong.cnblogs.com/archive/2005/08/29/225521.html

我们经常要在一个表中将数据迁移到另一个表,当然,用的方法十分多了。在.net 2.0中,提供了一个sqlbulkcopy类,也可以实现如下的操作,下面简单介绍下。比如一个表如下
CREATE TABLE Person3
(

PersonID int IDENTITY(1,1) PRIMARY KEY, 
Name nvarchar(200), 
Email nvarchar(200), 
Picture image 

)

INSERT INTO Person3(Name,Email,Picture) 
SELECT Name,Email,Picture FROM Person

假设person表已经存在了,则上面的语句可以往person3表中插入数据(在sql server 2005中执行)。现在我们使用下面的代码来实现
   string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

SqlConnection myConnection = new SqlConnection(connectionString);

SqlCommand myCommand = new SqlCommand("SELECT * FROM Person", myConnection);

myConnection.Open();

SqlDataReader dr = myCommand.ExecuteReader();

SqlConnection myNewConnection = new SqlConnection(connectionString);

myNewConnection.Open();

SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);

bulk.DestinationTableName = "[Person3]";

try

{

bulk.WriteToServer(dr);

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

finally

{

myNewConnection.Close();

dr.Close();

myConnection.Close();

bulk.Close();

}

  下面来解析下。首先,新建一个数据库连接,之后是很经典的代码了,从person表中拿出数据,当到datareader中去。之后,我们又新建立了个数据连接,之后,使用

SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);

bulk.DestinationTableName = "[Person3]";

其中,将mynewconnection作为参数传到 sqlbulkcopy类的构造参数中去,并指定目标迁移的表名是person3.
   之后,再使用bulk.WriteToServer(dr);就可以迁移了。
    而上面的person表和person3的结构是完全相同的,那么如果结构不同的,怎么办呢?下面举例子说明,创建一个表person2
  CREATE TABLE Person2 

PersonID int IDENTITY(1,1) PRIMARY KEY, 
FirstName nvarchar(200),
LastName nvarchar(200), 

Email nvarchar(200), 
Picture image
)
 如果我们按上面将person表迁移到person2表中去,将会出错,因为字段不同,而我们将采用下面的代码
  string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

SqlConnection myConnection = new SqlConnection(connectionString);

SqlCommand myCommand = new SqlCommand("SELECT * FROM Person", myConnection);

myConnection.Open();

SqlDataReader dr = myCommand.ExecuteReader();

SqlConnection myNewConnection = new SqlConnection(connectionString);

myNewConnection.Open();

SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);

bulk.DestinationTableName = "[Person2]";

bulk.ColumnMappings.Add("Name""LastName");

bulk.ColumnMappings.Add("Email""Email");

bulk.ColumnMappings.Add("Picture""Picture");

try

{

bulk.WriteToServer(dr);

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

finally

{

myNewConnection.Close();

dr.Close();

myConnection.Close();

bulk.Close();

}

  可以看到,这里使用bulk.ColumnMappings.Add(“。。。”,“。。。”)来强制规定,源目标字段和哪一个目标表的字段相匹配了。
   据说用sqlbulkcopy类,在数据多的情况下,性能是十分好的,呵呵。

 

转载于:https://www.cnblogs.com/gongyu/p/3938993.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小案例:13行python代码实现对微信进行推送消息

一、前言: Python可以实现给QQ邮箱、企业微信、微信等等软件推送消息,今天咱们实现一下Python直接给微信推送消息。 这里咱们使用了一个第三方工具pushplus 二、单人推送 实现步骤: 1、用微信注册一个此网站的账号 2、将token复制出来&am…

python书籍_Python书籍大汇总——入门到实战

学习Python的朋友们越来越多,当当网和京东上面的Python类编程书籍,也从几年前寥寥无几到现在多的不知道选哪本才好了的地步。无论是自学还是参加培训班跟着老师学习,我们都需要几本实用的Python书,系统全面的掌握Python编程的相关…

LeetCode 87. 扰乱字符串(记忆化递归 / DP)

文章目录1. 题目2. 解题2.1 记忆化递归2.2 动态规划1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。 下图是字符串 s1 “great” 的一种可能的表示形式。 great/ \gr eat/ \ / \ g r e a…

信号量的分类

信号量的分类Mutual Exclusion Semaphores(互斥):一种特殊的二进制信号量,专门针对互斥操作进行了优化。Binary Semaphores(二进制):完成互斥、同步操作的最佳方式;速度最快&#xf…

问题总结:一个 list 使用 for 遍历,边循环边删除的问题

一、需求: 对一个 list 数据类型写一个循环删除的程序 二、问题 来,我们来看看代码跟效果: # 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素 datas [0,1,2,3,4]# 打印元素组&am…

cpu使用率_漫话性能:CPU使用率

序言CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会关注的第一个指标。节拍率为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使…

TensorFlow 2.0 - 自定义模型、训练过程

文章目录1. 自定义模型2. 学习流程学习于:简单粗暴 TensorFlow 2 1. 自定义模型 重载 call() 方法,pytorch 是重载 forward() 方法 import tensorflow as tf X tf.constant([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0]]) y tf.constant([[10.0],[20.0]])clas…

谁动了我的产品

2014年3月中旬离开了自己奋斗三年的公司,这是一家海关政府公司,三年里无论是做项目需求分析、项目开发、项目测试、项目上线实施、项目上线跟踪、收集反馈、做项目版本修改,我和我的团队都在一个有非常明确目标、有非常明确思路的过程中&…

LeetCode 352. 将数据流变为多个不相交区间(map二分查找)

文章目录1. 题目2. 解题1. 题目 给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。 例如,假设数据流中的整数为 1,3,7,2&…

windows键按了没反应_windows快捷键使用 - 小怜

1、总的参考图:2、ctrl的组合使用:1与shift键结合:2 ctrl shift del # 快速清除浏览器缓存记录3 ctrl shift N # 浏览器当中,快速打开无痕新窗口。chrome内核的应该都可以,chrome和新…

Python倒计时自动发微信(电脑版微信)

一、前言: Python倒计时自动发微信(电脑版微信登录状态) 二、主要思路及步骤: 1、先启动微信 2、定位到搜索框 3、搜索微信 4、进入聊天窗口 5、粘贴文本内容 6、发送 7、关闭微信窗口 三、代码: import …

Javascript日期函数使用需要注意地方

当我们需要获取未来某个时间的毫秒数时,可能第一时间想到的方法是 (new Date("2014-12-08 12:00:00")).getTime() 这个在方法在chrome下是会返回一个数字的。 但是在IE下返回的是一个NaN,是因为IE下认为 YYYY-mm-dd HH:ii:ss不是一个合理的日期…

python判断是工作日还是休息日

一、概述 最近在做数据分析,需要判断一个日期是否为工作日,节假日。 找到一个现成的插件,蛮好用的。 1.1、插件介绍 chinesecalendar PyPI 判断某年某月某一天是不是工作日/节假日。 1.2、安装 pip install chinese_calendar该模块常…

win10主题更换_还不升级? win10精简版不到10G,运行比win7还快,旧电脑的福音

即使现在win7系统已经停止了服务,但是还有许多人宁愿面对随时有可能出现问题的win7,还是不愿升级win10系统。至于原因,五花八门,比如win7兼容性和稳定性更好,比如win10经常更新,还有许多软件无法在win10环境…

LeetCode 1732. 找到最高海拔

文章目录1. 题目2. 解题1. 题目 有一个自行车手打算进行一场公路骑行,这条路线总共由 n 1 个不同海拔的点组成。 自行车手从海拔为 0 的点 0 开始骑行。 给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i 1 的 净海拔高度差&#xff0…

小案例:利用python估算最外轮廓区域面积

一、需求: 给出一张图片,估算最外轮廓区域面积 二、步骤: 1、读取图片信息 2、利用open-cv,自适应分割图片 3、提取最外轮廓像素值 4、利用像素值标记轮廓 5、计算轮廓面积 三、代码: import cv2# 读取图片信息…

ApplicationContext容器的设计原理

1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理。 2.在FileSystemXmlApplicationContext的设计中,我们看到ApplicationContext应用上下文的主要功能已经在FileSystemXmlAp…

使用c++查看linux服务器某个进程正在使用的内存_Linux 系统管理

1、进程管理介绍什么是进程程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合进程是正在执行当中的程序。程序在执行时,执行人的权限和属性、以及程序的代码都会被加载进内存,操作系统给这个进程分配一个 ID…

小案例:利用Python写个教师常用的点名软件

一、需求: 教师上课常用的点名软件 二、python库安装: openpyxl是Python中用于读写excel文件tkinter是Python中GUI编程非常好用的库,而且是标准库,不需要安装,导入即可使用random库是Python中用于实现随机功能的库&…

如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN

如何用DNSGeoIPNginxVarnish做世界级的CDN 如何用BIND, GeoIP, Nginx, Varnish来创建你自己的高效的CDN网络?CDN,意思是Content Distrubtion Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡&#xf…