在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」    MicrosoftSQLServer包含名为bcp的常用命令行应用程序,用于快速将大文件批量复制到SQLServer数据库的表或视图中。使用SqlBulkCopy类可以编写提供类似功能的托管代码解决方案。还可以通过其他方式将数据加载到SQLServer表中(例如INSERT语句),但是SqlBulkCopy提供的性能要明显优于这些方式。   

大家好,又见面了,我是你们的朋友全栈君。

 

    Microsoft SQL Server 包含名为 bcp 的常用命令行应用程序,用于快速将大文件批量复制到 SQL Server 数据库的表或视图中。使用 SqlBulkCopy 类可以编写提供类似功能的托管代码解决方案。还可以通过其他方式将数据加载到 SQL Server 表中(例如 INSERT 语句),但是 SqlBulkCopy 提供的性能要明显优于这些方式。

    SqlBulkCopy 类只能用于向 SQL Server 表中写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可以加载到 DataTable 实例或使用 IDataReader 实例读取即可。

使用 SqlBulkCopy 类可以执行下列操作:

  • 单次批量复制操作

  • 多次批量复制操作

  • 事务中的批量复制操作

示例1: 单次批量复制操作

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
    
private
 
void
 sqlBulkCopy()
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        


{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//建立连接信息
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            SqlConnectionStringBuilder sqlcsb = new SqlConnectionStringBuilder();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.DataSource = “SQLProduction”;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.InitialCatalog = “Sales”;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.IntegratedSecurity = true;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            sqlcsb.ConnectionString = @”data source=myDBServer;user id=sa;initial catalog=myDB;password=;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConnection SqlConn 
= new SqlConnection(sqlcsb.ConnectionString);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//建立获取数据命令
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlCommand cmd = new SqlCommand(“SELECT * FROM SG4262010100007”, cnn);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlDataReader dataReader = cmd.ExecuteReader();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
string dbFile = @”C:/20071214.mdb;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbConnectionStringBuilder oleConStr 
= new OleDbConnectionStringBuilder();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            oleConStr.ConnectionString 
= Provider=Microsoft.Jet.OLEDB.4.0;Data Source= + dbFile +
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                              
;User Id=admin;Password=;;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbConnection OleConn 
= new OleDbConnection(oleConStr.ConnectionString);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbCommand cmd 
= new OleDbCommand(select * from SG4262010100007 , OleConn);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            System.Data.OleDb.OleDbDataReader dataReader 
= cmd.ExecuteReader();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlTransaction transaction 
= SqlConn.BeginTransaction(); ;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
// 创建一个 SqlBulkCopy 对象.
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            SqlBulkCopy bulkCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, transaction);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.BatchSize 
= 10;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.BulkCopyTimeout 
= 500000000;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.SqlRowsCopied 
+= new SqlRowsCopiedEventHandler(sbc_SqlRowsCopied);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.NotifyAfter 
= 10;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//复制数据至目标对象
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            bulkCopy.DestinationTableName = SG4262010100007;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
try
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                bulkCopy.WriteToServer(dataReader);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                transaction.Commit();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            }

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
catch (Exception err)
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                transaction.Rollback();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
throw new Exception(err.ToString());
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            }

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
// 关闭所有的对象
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            bulkCopy.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            dataReader.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleConn.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConn.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        }


在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        

void
 sbc_SqlRowsCopied(
object
 sender, SqlRowsCopiedEventArgs e)
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        


{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            showMsg(
已完成行数: + e.RowsCopied.ToString());
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        }


在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        

private
 
delegate
 
void
 showMsgDelegate(
string
 msg);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        

private
 
void
 showMsgDel(
string
 msg)
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        


{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
this.myRichTextBox1.AppendText(msg + System.Environment.NewLine);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        }


在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        

private
 
void
 showMsg(
string
 msg)
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        


{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
this.BeginInvoke(new showMsgDelegate(showMsgDel), new object[] { msg });
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        }

2.
 我们可以有选择性的从目标数据选取数据大批量复制至目标对象指定的字段中.

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
     
private
 
void
 HasSelSqlBulkCopy()
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        


{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//建立连接信息
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            SqlConnectionStringBuilder sqlcsb = new SqlConnectionStringBuilder();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.DataSource = “SQLProduction”;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.InitialCatalog = “Sales”;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//sqlcsb.IntegratedSecurity = true;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            sqlcsb.ConnectionString = @”data source=myDBServer;user id=sa;initial catalog=myDB;password=;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConnection SqlConn 
= new SqlConnection(sqlcsb.ConnectionString);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//建立获取数据命令
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlCommand cmd = new SqlCommand(“SELECT * FROM SG4262010100007”, cnn);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//SqlDataReader dataReader = cmd.ExecuteReader();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
string dbFile = @”C:/20071214.mdb;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbConnectionStringBuilder oleConStr 
= new OleDbConnectionStringBuilder();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            oleConStr.ConnectionString 
= Provider=Microsoft.Jet.OLEDB.4.0;Data Source= + dbFile +
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                              
;User Id=admin;Password=;;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbConnection OleConn 
= new OleDbConnection(oleConStr.ConnectionString);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleDbCommand cmd 
= new OleDbCommand(select DATETIME,INFOTAG,MSGTEXT  from SG4262010100007 , OleConn);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            System.Data.OleDb.OleDbDataReader dataReader 
= cmd.ExecuteReader();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConn.Open();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlTransaction transaction 
= SqlConn.BeginTransaction(); ;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
// 创建一个 SqlBulkCopy 对象.
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            SqlBulkCopy bulkCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, transaction);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.BatchSize 
= 10;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.BulkCopyTimeout 
= 500000000;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.SqlRowsCopied 
+= new SqlRowsCopiedEventHandler(sbc_SqlRowsCopied);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.NotifyAfter 
= 10;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//复制数据至目标对象
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            bulkCopy.DestinationTableName = testtb;
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.ColumnMappings.Clear();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
//设置源对象与目标对象的字段对应关系
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            SqlBulkCopyColumnMapping column1 =
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                          
new SqlBulkCopyColumnMapping(
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                          
DATETIMEdate);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.ColumnMappings.Add(column1);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlBulkCopyColumnMapping column2 
=
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
new SqlBulkCopyColumnMapping(
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
INFOTAGflag);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.ColumnMappings.Add(column2);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlBulkCopyColumnMapping
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                column3 
=
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
new SqlBulkCopyColumnMapping(
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
MSGTEXTmyValue);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            bulkCopy.ColumnMappings.Add(column3);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
try
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                bulkCopy.WriteToServer(dataReader);
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                transaction.Commit();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            }

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
catch (Exception err)
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
{

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                transaction.Rollback();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」                
throw new Exception(err.ToString());
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            }

在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            
// 关闭所有的对象
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」
            bulkCopy.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            dataReader.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            OleConn.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」            SqlConn.Close();
在事务中执行批量复制操作SqlBulkCopy,SqlTransaction「建议收藏」        }


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140657.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea添加主题插件

    idea添加主题插件添加完主题插件会重启一次idea.

    2022年6月27日
    28
  • CAN总线协议

    CAN总线协议目录1.总体概述 1.1基本概念1.2通讯方式1.3为什么使用CAN?1.总体概述 1.1基本概念  CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。 1.2通讯方式  回顾前面学到的RS23.

    2022年6月28日
    38
  • 如何查看vue版本号以及vue/cli脚手架版本号「建议收藏」

    如何查看vue版本号以及vue/cli脚手架版本号「建议收藏」查看vue版本号方法一:直接在项目的package.json文件,找到dependencies就能看到了方法二:输入命令npmlsvue(或者npmlistvue)查看vue/cli脚手架版本号方法:输入命令vue-V(或者vue–version)

    2022年5月30日
    316
  • 【已解决】Win10系统点击ikbc机械键盘win键无效的解决方法

    【已解决】Win10系统点击ikbc机械键盘win键无效的解决方法一、问题描述今天周一,早上一来上班,打开电脑操作一段时间后,我想按Win+L来锁屏,发现win键按了没有任何反应,只响应了L键。设备信息描述一下:系统:Windows10键盘:ikbc怎么解决它呢?二、解决问题ikbc键盘win按键失灵问题。其实是自己不小心把win键给锁定了。下面是介绍一下ikbc键盘上,锁定win键和解锁win键的方法,如下表所示:键盘款式锁定的方法解锁的方法非静音款Fn+左WinFn+右Win静音款Fn+F12F

    2022年6月1日
    150
  • Parallel.ForEach() 并行循环[通俗易懂]

    Parallel.ForEach() 并行循环[通俗易懂]现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。微软的并行运算平台(Microsoft’sParallelComputingPlatform(PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。Parallel.ForEach()和Parallel.For()就是微软并发类的成员。今天做了一个简…

    2022年7月19日
    17
  • Mysql的row_format(fixed与dynamic)

    Mysql的row_format(fixed与dynamic)

    2021年11月6日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号