2010-10-28 8 views
0

J'utilise un TransactionScope dans un thread pour vider des données dans ma base de données SQL Server.Arrêter la transaction dans un thread

using (TransactionScope scope = new TransactionScope()) 
{ 
    // Dump data in database 
    scope.Complete(); 
} 

La transaction est une transaction longue (40 secondes) car les données sont grandes: c'est normal.

Lorsque je fais un Abort() pour arrêter le thread au cours de cette transaction, SQL Server semble être verrouillé pendant quelques minutes.

Qu'est-il arrivé?

Comment puis-je éviter cela?

Répondre

2

Dit simplement: vous ne pouvez pas.

Le serveur semble être verrouillé pendant quelques minutes . N ° SQL Server est occupé à annuler votre transaction.

Il est entièrement optimisé pour les transactions COMMIT, pas pour les annuler. Annuler les mises à jour LARGE est une opération LENTE. Selon la disposition de votre serveur et la quantité de données, cela peut prendre quelques minutes ou même quelques heures.

Tout ce que vous pouvez faire est ... pas annuler/annuler. Ou attendre.

+0

Ok, merci! Si je tue mon programme C#, j'ai le même comportement –

+1

Comme il se doit. Tout client avorté - et la suppression du programme en est une - déclenchera une restauration du côté serveur. La transaction n'a pas été commise car elle est annulée. – TomTom

+0

c'est évident, si vous tuez le programme, le tran n'est pas validé et sera annulé. – vaitrafra

Questions connexes