【发布时间】:2012-07-12 13:38:04
【问题描述】:
我在使用TransactionScope 将多个数据库查询包装到一个事务中时遇到了问题,我正在使用批处理大小为 500 的 SqlBulkCopy。当我将批处理大小增加到 1000 时,我收到了错误:
与当前连接相关的事务已经完成 但尚未处置。交易必须在 连接可用于执行 SQL 语句。
这是我正在使用的代码:
using (var scope = new TransactionScope())
{
using (var connection = (SqlConnection)customerTable.OpenConnection())
{
var table1BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName1
};
table1BulkCopy.WriteToServer(table1DataTable);
var table2BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName2
};
table2BulkCopy.WriteToServer(table2DataTable);
var table3BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName3
};
table1BulkCopy.WriteToServer(table3DataTable);
var table4BulkCopy = new SqlBulkCopy(connection)
{
BatchSize = BATCH_SIZE,
DestinationTableName = TableName4
};
table4BulkCopy.WriteToServer(table4DataTable);
scope.Complete();
}
}
【问题讨论】:
标签: c# .net sql-server-2008 c#-4.0