2009-03-24 6 views
3

EDIT: J'accède uniquement à 1 base de données mais une transaction DTC IS est en cours de création. Je peux le voir dans l'interface graphique de la liste de transactions DTC (plugin services de composants). Pourquoi est-ce?Transactionscope ou IDbTransaction

J'ai besoin d'effectuer une transaction (plusieurs commandes d'insertion) contre 1 base de données.

Devrais-je utiliser TransactionScope ou IDbTransaction (connection.BeginTransaction)? TransactionScope semble être plus récent ... mais devrait-il être utilisé uniquement pour les commits en 2 phases?

Merci

Répondre

4

TransactionScope ne s'intensifiera à une transaction distribuée si elle détecte plus d'une connexion. Cela signifie que TransactionScope est aussi léger que BeginTransaction pour les transactions locales et TransactionScope est beaucoup plus facile à utiliser.

3

Tant que vous utilisez une seule connexion et que vous ne la fermez pas et ne rouvrez pas pendant une transaction TransactionScope, elle ne doit pas faire la promotion d'une transaction distribuée. Si le service DTC n'est pas activé sur votre machine, une exception est générée s'il essaie de promouvoir. Si le DTC fonctionne, vous ne serez pas le plus sage de la promotion, sauf pour une légère pause.

3

Dans la grande majorité des cas, TransactionScope est beaucoup plus agréable à utiliser, en particulier en conjonction avec l'utilisation de blocs. Toutefois, soyez prudent si vous utilisez SQL Server 2000. Il ne fonctionne pas bien avec TransactionScope et sera toujours transmis à une transaction distribuée. Pour plus de détails, voir this link.