在事务中执行批量复制操作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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Excel 8000401a 错误 及解决办法[通俗易懂]

    Excel 8000401a 错误 及解决办法[通俗易懂]“/”应用程序中的服务器错误。——————————————————————————–检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:8000401a。说明:执行当前Web请求期…

    2022年7月25日
    13
  • kali 更新源,亲测好用

    kali 更新源,亲测好用debhttp://mirrors.163.com/debian/jessiemainnon-freecontribdebhttp://mirrors.163.com/debian/jessie-updatesmainnon-freecontribdebhttp://mirrors.163.com/debian/jessie-backportsmainnon-f

    2022年5月8日
    46
  • 话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本

    话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本

    2021年9月25日
    101
  • 深度学习之GoogLeNet解读

    深度学习之GoogLeNet解读提出背景相关工作基本思想及过程提出背景 始于LeNet-5,一个有着标准的堆叠式卷积层冰带有一个或多个全连接层的结构的卷积神经网络。通常使用dropout来针对过拟合问题。 为了提出一个更深的网络,GoogLeNet做到了22层,利用inception结构,这个结构很好地利用了网络中的计算资源,并且在不增加计算负载的情况下,增加网络的宽度和深度。同时,为了优化网络质量,采用了Hebbian原

    2022年8月14日
    11
  • Redis:Jedis连接池JedisPool[通俗易懂]

    Redis:Jedis连接池JedisPool[通俗易懂]目录1、JedisPool的应用1.1基本应用1.2封装应用1.3增加超时重试2、JedisPool配置2.1工厂配置2.2资源池配置Jedis提供了连接池JedisPool。由于Jedis对象不是线程安全的,所以一般会从连接池中取出一个Jedis对象独占,使用完毕后再归还给连接池。maven依赖:<!–https://mv…

    2025年9月14日
    6
  • java 无锁编程_使用CAS、FAA实现无锁编程

    java 无锁编程_使用CAS、FAA实现无锁编程锁会导致性能降低,在特定情况可用硬件同步原语替代锁,保证和锁一样数据安全,同时提供更好性能。硬件同步原语(AtomicHardwarePrimitives)由计算机硬件提供的一组原子操作,较常用的原语主要是CAS和FAA两种。CAS(CompareandSwap)比较交换FAA原语(FetchandAdd)语义是,先获取变量p当前的值value,然后给变量p增加inc,最后返回变量p之…

    2022年6月3日
    56

发表回复

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

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