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


相关推荐

  • JavaScript专题(二)数组去重,会就要会的理直气壮

    JavaScript专题(二)数组去重,会就要会的理直气壮相信当部分开发同学都会遇到这个问题,它的答案有很多种,但是想要真的的回答好这个问题却比较难,我们今天来看看应该怎么回答这个问题。本文篇幅较长,不妨收藏下来慢慢阅读~

    2022年6月16日
    29
  • 查看idea激活码-激活码分享

    (查看idea激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

    2022年3月27日
    76
  • 『机器学习笔记 』GBDT原理-Gradient Boosting Decision Tree

    『机器学习笔记 』GBDT原理-Gradient Boosting Decision Tree1.背景1.1GradientBoosting1.2提升树-boostingtree回归问题提升树算法2GradientBoostingDecisionTree2.1函数空间的数值优化2.2算法Shrinkage总结附录参考资料相似算法:1.背景决策树是一种基本的分类与回归方法。决策树模型具有分类速度快,模型…

    2022年10月5日
    2
  • 路由跟踪之tcptraceroute IP延时之tcpping

    路由跟踪之tcptraceroute IP延时之tcpping现代网络广泛使用防火墙,导致传统路由跟踪工具发出的(ICMP应答(ICMPecho)或UDP)数据包都被过滤掉了,所以无法进行完整的路由跟踪。尽管如此,许多情况下,防火墙会准许反向(inbound)TCP数据包通过防火墙到达指定端口,这些端口是主机内防火墙背后的一些程序和外界连接用的。通过发送TCPSYN数据包来代替UDP或者ICMP应答数据包,tcptracerout…

    2022年6月20日
    80
  • pycharm激活码2021【2021最新】[通俗易懂]

    (pycharm激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html9ZHRNTE33T-eyJsaWNlbnNlSW…

    2022年3月28日
    73
  • BMP文件解析_图片分析

    BMP文件解析_图片分析BMP文件简介BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文

    2025年6月16日
    3

发表回复

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

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