SqlBulkCopy批量复制数据
在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便。而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据。数据源可以来自关 系数据库或者XML文件,甚至WebService返回结果。其中最重要的一个类就是SqlBulkCopy类,使用它可以很方便的帮助我们把数据源的数 据迁移到目标数据库中。
下面我们先通过一个简单的例子说明这个类的使用:
首先:web.config
<connectionStrings>
<add name="srcDBConnection"connectionString="server=.;database=pubs;uid=sa;pwd="/>
<add name="desDBConnection"connectionString="server=.;database=NorthWind;uid=sa;pwd="/>
</connectionStrings>
C#文件: 前台不Copy了,就一个按钮,一个Label
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
publicpartialclassASP_NET : System.Web.UI.Page
{
private DateTime startTime;
protected void Button1_Click(object sender, EventArgs e)
{
= DateTime.Now;
string srcConnString = "";
string desConnString = "";
= new SqlConnection();
= new SqlConnection();
= new SqlCommand();
= new SqlDataAdapter();
= new DataTable();
//srcConnString = ConfigurationManager.ConnectionStrings["srcDBConnection"].ConnectionString;
desConnString = ConfigurationManager.ConnectionStrings["desDBConnection"].ToString();
//srcConnection.ConnectionString = srcConnString;
srcConnection.ConnectionString = desConnString;
= srcConnection;
//sqlcmd.CommandText = "select * from jobs";
sqlcmd.CommandText = "select * from abc";
= CommandType.Text;
= sqlcmd;
= new SqlBulkCopy(desConnString,SqlBulkCopyOptions.UseInternalTransaction);
= 5000;
+=new SqlRowsCopiedEventHandler(OnRowsCopied);
= dt.Rows.Count;
try
{
// sbc.DestinationTableName = "jobs";
sbc.DestinationTableName = "bcd";
catch (Exception ex)
{
= ex.Message.ToString();
finally
{
private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
{
+= args.RowsCopied.ToString() + " rows are copied<Br>";
= DateTime.Now - startTime;
+= "Copy Time:" + copyTime.Seconds.ToString() + "." + copyTime.Milliseconds.ToString() + " seconds";
代码分析:
SqlBulkCopy sbc =newSqlBulkCopy(desConnString,SqlBulkCopyOptions.UseInternalTransaction);
sbc.BulkCopyTimeout = 5000000; //指定操作完成的Timeout时间
sbc.SqlRowsCopied +=newSqlRowsCopiedEventHandler(OnRowsCopied);
=dt.Rows.Count;
try
{
// sbc.DestinationTableName = "jobs";
sbc.DestinationTableName = "bcd";
性能方面:我在Sql中用proc插入68万条数据花了近8分钟,用SqlBulkCopy花了53.234秒~,效率高了7倍耶!不过现在也不做这方面的底层了,呵呵,把自己写的一个测试存储过程也贴上吧,方便自己学习
createtableabc
intidentity(1,1) primarykey,
varchar(50) notnull
go
/**********存储过程**********************/
createprocaddData
as
declare@iint
set@i=1
while@i<1000000
begin
insertintoabc values('testDescription')
set@i=@i+1
end
go
select*intotitles frompubs.dbo.titles where1>3复制跨数据库的表结构
转自http://blog.csdn.net/huaer1011/archive/2008/04/21/2312361.aspx
SqlBulkCopy批量复制数据相关推荐
- .net2.0中SqlBulkCopy批量复制数据出错原因分析!
在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www. ...
- SqlBulkCopy 批量复制数据到数据表
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍: 在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个S ...
- 用.net中的SqlBulkCopy类批量复制数据 (转载)
在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...
- SqlBulkCopy批量插入数据
利用SqlBulkCopy快速大批量导入数据 protected void Button1_Click(object sender, EventArgs e) { DateTime ...
- C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据
C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...
- sqlserver:使用 SqlBulkCopy 批量插入数据
环境: window 10 sqlserver 2014 参考: <博文:SqlBulkCopy使用注意事项> 1. 问题场景 在批量迁移或导入数据时,我们可能会遇到插入大量数据的问题,比 ...
- sqlbulkcopy mysql_SqlBulkCopy 批量复制数据到数据库
1.简介 核心方法:SqlBulkCopy.WriteToServer 将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中. 2.一句 ...
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类 ...
最新文章
- Oracle数据库查看表空间是否为自增的
- 统计学常犯的18个错误,请务必跳过这些坑!
- 互联网协议 — TCP — 性能问题解析
- delphi memo 查找字符 下行插入_Vim高手,从来不用鼠标2——替换、撤销、缩进、查找
- opeansea, nft, trend
- cannot resolve symbol ‘springframework‘
- android系统五大布局,android 五大布局文件
- 图像处理与图像识别笔记(五)图像增强2
- 2021年高考理综单科成绩查询,2021年高考总分是多少 2021年高考各科满分多少分...
- python lxml用法详解_Python-- lxml用法
- sharepoint安装心得-.net与sharepoint安装 sharepoint安装心得_过程(一)
- 计算与编程思维-Python实践【Python Crash Course】
- 校园导航系统之用弗洛伊德算法求加权图的最短路径
- 前端二面必会面试题(附答案)
- Python获取下周一日期
- 【ES6】Promise
- Laya-关于预设入门
- STM32笔记20--电容触摸实验/IIC协议
- 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
- 现实世界的映射与超越:电子游戏的叙事研究
热门文章
- c++如何定义一个只能在堆上(栈上)生成对象的类?
- c++ assert()断言
- QT的QMultiHash类的使用
- c语言文本按行分配数组元素,【转】C语言中动态分配数组
- 「JupyterNotebook-bug」Jupyter Notebook卸载已安装的第三方库不能输入yes的问题
- SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
- SQLite 创建表(http://www.w3cschool.cc/sqlite/sqlite-create-table.html)
- Python数据分析之初识numpy常见方法使用案例
- 线性代数之矩阵导数微分
- Anaconda 安装 Python 库(MySQLdb)的方法