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[]的操作,大家可以灵活运用.
/**//*******************调用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[]的操作,大家可以灵活运用.
相关文章推荐
- SqlBulkCopy实现数据批量复制(ZZ)
- SqlBulkCopy实现数据批量复制
- C#:用SqlBulkCopy来实现批量插入数据
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- C#:用SqlBulkCopy来实现批量插入数据
- SqlBulkCopy来实现批量插入数据的功能
- [转]C#:用SqlBulkCopy来实现批量插入数据
- 用SqlBulkCopy来实现批量插入数据
- SqlBulkCopy从记事本批量复制数据4
- 用SqlBulkCopy实现批量插入数据
- SqlBulkCopy 批量复制数据到数据库
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
- SqlBulkCopy 批量复制数据到数据表
- SqlBulkCopy从记事本批量复制数据4
- C# 使用SqlBulkCopy,批量导入数据,并显示导入进度
- SqlBulkCopy(批量复制)使用方法 && SqlDataAdapter Update
- 采用SqlBulkCopy向数据库批量插入数据(大数据效果显著)
- 【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚