Как откатить OracleBulkCopy () вставленные строки? - PullRequest
1 голос
/ 22 июля 2009

Я попытался откатить внешнюю транзакцию, а также попытался прервать 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(), как я его вижу.

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

Ответы [ 2 ]

1 голос
/ 24 июля 2009

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

0 голосов
/ 22 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...