OracleBulkCopyOptions.Default とOracleBulkCopyOptions.UseInternalTransactionの違いと、間に一括挿入エラーが発生した場合にすべてのレコードをロールバックする方法を誰かが説明できますか?
OracleBulkCopyを使用して、Oracle データベースに一括挿入 (レコードの範囲は 100000 から 500000 まで変化します) しています。私の要件は、すべてのレコードを db に挿入するか、どのレコードも db に挿入しない (すべてのレコードをロールバックする) ことです。BatchSizeとして 25000 を指定し、 BulkCopyTimeoutとして 150 秒を指定しています。以下は私の現在のコードブロックです。
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;
}