OracleBulkCopyOptions的区别.默认和OracleBulkCopyOptions.UseInterna
本文关键字:OracleBulkCopyOptions UseInterna 区别 默认 | 更新日期: 2023-09-27 17:49:42
谁能解释一下OracleBulkCopyOptions。默认值和OracleBulkCopyOptions。UseInternalTransaction ,如果批量插入错误发生,我如何回滚所有的记录。
我使用OracleBulkCopy批量插入(记录范围从100000到500000不等)到Oracle数据库。我的要求是要么所有的记录应该插入到db或没有记录应该插入到db(回滚所有记录)。我给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;
}
OracleBulkCopy不支持所有记录的transaction,只有指定了UseInternalTransaction
时才支持批量的transaction。
From OracleBulkCopy Class
- 如果BatchSize> 0并且指定了UseInternalTransaction大容量复制选项, 每批大容量复制操作发生在一个事务。如果用于执行大容量复制的连接操作已经是交易的一部分引发InvalidOperationException异常。
- 如果BatchSize> 0且未指定UseInternalTransaction选项,则以BatchSize大小的批发送行到数据库;但是不执行与事务相关的操作。
对于您的问题:
谁能解释一下两者的区别是什么OracleBulkCopyOptions。违约,OracleBulkCopyOptions。UseInternalTransaction
Default:不为批处理使用事务。UseInternalTransaction:如果批大小大于0,则支持批事务。
看:OracleBulkCopyOptions枚举