我正在使用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/

10-10 07:30