2009-07-21 11 views
0

J'ai essayé d'annuler la transaction externe et j'ai également essayé d'abandonner OracleBulkCopy() mais il a quand même inséré toutes les lignes. Est-ce que quelqu'un sait comment faire cela?Comment faire pour restaurer les lignes insérées OracleBulkCopy()?

Cas 1: N'a pas fonctionné. Toutes les lignes sont insérées de toute façon.

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(); 

Cas n ° 2: Utiliser délégué OracleRowsCopiedEventHandler et ce rappel mis Oracle.RowsCopiedEventsArgs.Abort à true puis rollback sur la transaction en bloc catch. N'a pas travaillé non plus. Il semble que toute insertion avant l'appel Abort est déjà dans la base de données. OracleBulkCopy() est inférieur à SqlBulkCopy() comme je le vois.

Merci. Hoang

Répondre

0

Avez-vous essayé de mettre OracleBulkCopyOptions.UseInternalTransaction au lieu de OracleBulkCopyOptions.Default pour voir si l'exception InvalidOperationException est soulevée comme les documentation demandes?

+0

Cela n'a rien à voir avec mes questions. L'utilisation d'une transaction interne par lot ne m'aide pas à restaurer l'ensemble des lignes insérées. Fondamentalement, je veux tout restaurer. Disons que vous devez insérer des lignes de 100 Ko et que quelque part au milieu, vous voulez tout restaurer, pas les 50 derniers, alors que les 50 premiers sont déjà engagés. –

+0

Je sais. J'ai dit au sujet d'un test pour voir si tout fonctionne bien. Comme le dit la documentation, si vous utilisez UseInternalTransaction et utilisez BeginTransaction, une exception est levée. Si l'exception n'est pas soulevée, le problème est que la transaction n'est pas démarrée. – FerranB

+0

Oui, il déclenche l'exception si vous utilisez la transaction UserInternalTransaction. J'ai déjà essayé ça. J'ai également essayé d'utiliser CommittableTransaction comme transaction distribuée explicite. Cela n'a pas aidé non plus. –

1

OK, j'ai reçu la réponse d'Oracle. La transaction n'est actuellement pas prise en charge avec OracleBulkCopy.

Questions connexes