我正在使用SqlBulkCopy
插入大量数据:
try
{
using (var bulkCopy = new SqlBulkCopy(connection))
{
connection.Open();
using (var tran = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
bulkCopy.DestinationTableName = "table";
bulkCopy.ColumnMappings.Add("...", "...");
using (var dataReader = new ObjectDataReader<MyObject>(data))
{
bulkCopy.WriteToServer(dataReader);
}
tran.Commit();
return true;
}
}
}
catch (Exception ex)
{
return false;
}
但我总是异常(exception):
Unexpected existing transaction.
为什么会发生这种异常?
最佳答案
发生这种情况是因为使用SqlBulkCopy
构造函数而不指定事务将在内部创建其自己的事务。
通过创建事务,然后使用它来创建SqlBulkCopy
来避免这种情况。可以使用您要使用的事务创建SqlBulkCopy
,如下所示:
connection.Open();
using (var tran = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, tran))
{
关于c# - SqlBulkCopy-意外的现有事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19117106/