您的位置:首页 > 数据库 > SQL

SqlBulkCopy实现数据批量复制

2007-10-24 10:04 537 查看
最近项目中使用到了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[]的操作,大家可以灵活运用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: