SqlBulkCopy实现数据批量复制(ZZ)

最近项目中使用到了SqlBulkCopy实现批量复制,在这里,我把部分代码筛选出来简单说明一下,希望对大家研究和使用SqlBulkCopy 有帮助.因为是筛选的代码,不是完整的方法,请大家尽量不要直接拷贝使用,这篇文章的目的上帮大家简单的理解SqlBulkCopy.

SqlBulkCopy实现数据批量复制(ZZ) /*******************调用SqlBulkCopy实现DataTable到SQL的批量拷贝******************/
SqlBulkCopy实现数据批量复制(ZZ)            
if  (SqlConn.State  ==  ConnectionState.Closed)
SqlBulkCopy实现数据批量复制(ZZ)            
{
SqlBulkCopy实现数据批量复制(ZZ)                SqlConn.Open();
SqlBulkCopy实现数据批量复制(ZZ)            }

SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
// 定义SQL事务并嵌入到批量拷贝的工作中
SqlBulkCopy实现数据批量复制(ZZ)
            SqlTransaction objSqlTran  =  SqlConn.BeginTransaction();
SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
// 定义SqlBulkCopy:SqlConn为SqlConnection,SqlBulkCopyOptions枚举类型,objSqlTran为调用的事务
SqlBulkCopy实现数据批量复制(ZZ)
            SqlBulkCopy objSqlCopy  =  new  SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, objSqlTran);
SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
// 分批次拷贝的行数
SqlBulkCopy实现数据批量复制(ZZ)
            objSqlCopy.BatchSize  =  10 ;
SqlBulkCopy实现数据批量复制(ZZ)            objSqlCopy.BulkCopyTimeout 
=  240 ;
SqlBulkCopy实现数据批量复制(ZZ)            
// 目标表名
SqlBulkCopy实现数据批量复制(ZZ)
            objSqlCopy.DestinationTableName  =  " DetailAccountReport " ;
SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
// 源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
SqlBulkCopy实现数据批量复制(ZZ)
            objSqlCopy.ColumnMappings.Add( " ProjectDefID " " ProjectDefID " );
SqlBulkCopy实现数据批量复制(ZZ)            objSqlCopy.ColumnMappings.Add(
" Num " " SumNum " );
SqlBulkCopy实现数据批量复制(ZZ)            objSqlCopy.ColumnMappings.Add(
" Money " " SumMoney " );
SqlBulkCopy实现数据批量复制(ZZ)            objSqlCopy.ColumnMappings.Add(
" Explain " " Explain " );
SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
try
SqlBulkCopy实现数据批量复制(ZZ)            
{
SqlBulkCopy实现数据批量复制(ZZ)                
//将DataTabel类型的objDT作为源拷贝到目标表
SqlBulkCopy实现数据批量复制(ZZ)
                objSqlCopy.WriteToServer(objDT);
SqlBulkCopy实现数据批量复制(ZZ)                objSqlTran.Commit();
SqlBulkCopy实现数据批量复制(ZZ)            }

SqlBulkCopy实现数据批量复制(ZZ)            
catch
SqlBulkCopy实现数据批量复制(ZZ)            
{
SqlBulkCopy实现数据批量复制(ZZ)                objSqlTran.Rollback();
SqlBulkCopy实现数据批量复制(ZZ)            }

SqlBulkCopy实现数据批量复制(ZZ)            
finally
SqlBulkCopy实现数据批量复制(ZZ)            
{
SqlBulkCopy实现数据批量复制(ZZ)                objSqlCopy.Close();
SqlBulkCopy实现数据批量复制(ZZ)                SqlConn.Close();
SqlBulkCopy实现数据批量复制(ZZ)            }

SqlBulkCopy实现数据批量复制(ZZ)
SqlBulkCopy实现数据批量复制(ZZ)            
return  objDT;

 

说明://源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
            objSqlCopy.ColumnMappings.Add("ProjectDefID", "ProjectDefID");
            objSqlCopy.ColumnMappings.Add("Num", "SumNum");
            objSqlCopy.ColumnMappings.Add("Money", "SumMoney");
            objSqlCopy.ColumnMappings.Add("Explain", "Explain");

注意这里,前面是源表字段,后面是目标表字段.默认是按照顺序和名称匹配的形式,所以要求两个数据集的结构完全一致,但是在现实使用中,很少有完全一致的情况出现,所以这段代码尤其重要.


objSqlCopy.WriteToServer(objDT);

objDT是我们项目中在之前经过处理的DataTable, WriteToServer()支持对DataTable,DataReader,DataRow[]的操作,大家可以灵活运用.

你可能感兴趣的:(copy)