1

谁能解释OracleBulkCopyOptions.DefaultOracleBulkCopyOptions.UseInternalTransaction之间的区别以及如果两者之间发生任何批量插入错误,我如何回滚所有记录。

我正在使用OracleBulkCopy向 Oracle 数据库批量插入(记录范围从 100000 到 500000 不等)。我的要求是所有记录都应该插入数据库,或者没有记录应该插入数据库(回滚所有记录)。我将 25000 作为BatchSize和 150 秒作为BulkCopyTimeout。下面是我当前的代码块。

public bool WriteExcelDataToServerRouteOne(DataTable excelTable)
        {
            var columnMapping = from table in excelTable.Columns.Cast<DataColumn>() select new OracleBulkCopyColumnMapping(table.ColumnName, table.ColumnName);
            using (var bulkcopy = new OracleBulkCopy(ConnectionString, OracleBulkCopyOptions.Default))
            {
                bulkcopy.DestinationTableName = DestinationTable;
                foreach (var mapping in columnMapping)
                    bulkcopy.ColumnMappings.Add(mapping);
                bulkcopy.BulkCopyTimeout = TimeOut.Value;
                bulkcopy.BatchSize = BatchSize.Value;
                bulkcopy.WriteToServer(excelTable);
            }
            return true;
        }
4

1 回答 1

3

OracleBulkCopy 不支持所有记录的事务,如果UseInternalTransaction指定它只支持批量事务。

OracleBulkCopy 类

  • 如果 BatchSize > 0 并且指定了 UseInternalTransaction 大容量复制选项,则每批大容量复制操作都发生在一个事务中。如果用于执行大容量复制操作的连接已经是事务的一部分,则会引发 InvalidOperationException 异常。
  • 如果 BatchSize > 0 并且未指定 UseInternalTransaction 选项,则将行以 BatchSize 大小的批次发送到数据库,但不执行与事务相关的操作。

对于您的问题:

谁能解释 OracleBulkCopyOptions.Default 和 OracleBulkCopyOptions.UseInternalTransaction 之间的区别

默认值:不将事务用于批处理。UseInternalTransaction:如果批量大小大于 0,则支持批量事务。

请参阅: OracleBulkCopyOptions 枚举

于 2012-12-26T05:09:06.133 回答