2009-07-21 3 views
0

Я попытался отменить внешнюю транзакцию, а также попытался прервать OracleBulkCopy(), но он все еще вставил все строки. Кто-нибудь знает, как это сделать?Как откат OracleBulkCopy() вставленные строки?

Дело 1: Не работает. Все строки вставлены в любом случае.

OracleConnection connection = new OracleConnection(ConnectionString); 
connection.Open(); 
OracleTransaction trans = connection.BeginTransaction(); 
OracleBulkCopy bulkCopy = new OracleBulkCoopy(connection,OracleBulkCopyOptions.Default); 
bulkCopy.DestinationTableName = "SomeTable";  
bulkCopy.WriteToServer(SomeDataTable); 
trans.Rollback(); 

Случай 2: Используйте OracleRowsCopiedEventHandler делегат и в этом обратном установить Oracle.RowsCopiedEventsArgs.Abort в true, а затем откатить на операции в блоке поймать. Не работает. Кажется, что любая вставка перед вызовом Abort уже находится в базе данных. OracleBulkCopy() уступает SqlBulkCopy() тем, как я его вижу.

Спасибо. Хоанг

ответ

0

Вы пытались установить OracleBulkCopyOptions.UseInternalTransaction вместо OracleBulkCopyOptions.Default, чтобы увидеть, если исключение InvalidOperationException поднята как documentation претензии?

+0

Это не имеет ничего общего с моими вопросами. Использование внутренней транзакции для каждой партии не поможет мне откатить большую часть вставленных строк. В основном я хочу откат всего. Скажем, вам нужно вставить строки 100K, а где-то посередине вы хотите откатить все не последние 50K, в то время как первые 50K уже зафиксированы. – 2009-07-22 14:07:29

+0

Я знаю. Я сказал о тестировании, чтобы убедиться, что все работает нормально. как говорится в документации, если вы используете UseInternalTransaction и используете BeginTransaction, возникает исключение. Если исключение не возникает, может возникнуть проблема в том, что транзакция не запущена. – FerranB

+0

Да, это возбуждает исключение, если вы используете UserInternalTransaction. Я пробовал это. Также я попытался использовать CommittableTransaction как явную распределенную транзакцию. Это тоже не помогло. – 2009-07-22 17:11:27

1

ОК, я получил ответ от Oracle. В настоящее время транзакция не поддерживается OracleBulkCopy.

Смежные вопросы