Could anybody explain what is the difference between OracleBulkCopyOptions.Default and OracleBulkCopyOptions.UseInternalTransaction & how i can rollback all the record if any bulk insert error happens in between.
I am using OracleBulkCopy to bulk insert(records range varies from 100000 to 500000 ) to Oracle data base. My requirement is either all the records should insert into db or none of the record should insert into db(roll back all records). I am giving 25000 as BatchSize & 150 seconds as BulkCopyTimeout. Below is my current code block.
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 doesn’t support transaction for all the records, it only support transaction for batches if
UseInternalTransactionis specified.From OracleBulkCopy Class
For your question:
Default: Doesn’t uses transaction for batches.
UseInternalTransaction: Supports transaction for batches if the batch size is greater than 0.
See:
OracleBulkCopyOptions Enumeration