在事务中执行批量复制操作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「建议收藏」        }


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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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