posts - 365,  comments - 281,  trackbacks - 7
  2009年5月7日

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

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


            
//定义SQL事务并嵌入到批量拷贝的工作中
            SqlTransaction objSqlTran = SqlConn.BeginTransaction();

            
//定义SqlBulkCopy:SqlConn为SqlConnection,SqlBulkCopyOptions枚举类型,objSqlTran为调用的事务
            SqlBulkCopy objSqlCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, objSqlTran);

            
//分批次拷贝的行数
            objSqlCopy.BatchSize = 10;
            objSqlCopy.BulkCopyTimeout 
= 240;
            
//目标表名
            objSqlCopy.DestinationTableName = "DetailAccountReport";

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

            
try
            
{
                
//将DataTabel类型的objDT作为源拷贝到目标表
                objSqlCopy.WriteToServer(objDT);
                objSqlTran.Commit();
            }

            
catch
            
{
                objSqlTran.Rollback();
            }

            
finally
            
{
                objSqlCopy.Close();
                SqlConn.Close();
            }


            
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[]的操作,大家可以灵活运用.

posted @ 2009-05-07 15:36 风生水起 阅读(201) 评论(0) 编辑
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

即使你拥有人人羡慕的容貌,博览群书的才学,挥之不尽的财富,也不能证明你的强大,因为心的强大,才是真的强大。
昵称:风生水起
园龄:5年10个月
粉丝:24
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

文章分类

Friends

Studying

积分与排名

  • 积分 - 140499
  • 排名 - 684

最新评论

阅读排行榜

评论排行榜