2008-10-09 21 views
5

Ich schreibe derzeit eine Anwendung, die mehrere Einfügungen, Aktualisierungen und Löschungen für meine Geschäftseinheit erfordert. Ich verwende die TransactionScope-Klasse, um sicherzustellen, dass alle gespeicherten Prozeduren als einzelne Arbeitseinheit festgeschrieben oder zurückgesetzt werden können..NET TransactionScope-Klasse und T-SQL TRAN COMMIT und ROLLBACK

Meine Frage ist, muss ich COMMIT TRAN und ROLLBACK TRAN auch jede meiner gespeicherten Prozeduren verwenden, wenn ich die TransactionScope-Klasse in meiner .NET-Klassenbibliothek verwende?

Antwort

2

ON 2005 ist es nicht notwendig, auf 2000 würde ich, Auch ich setze normalerweise das transactionscope in ein "Verwenden" -Block.

Es gibt einige Performance-Probleme, wenn es auf 2000 und älter vs 2005

Siehe here

Dank

+0

Ich benutze SQL Server 2005. Danke für die Informationen –

0

Sie sollten es nicht brauchen - es sollte innerhalb des TransactionScope behandelt werden. Es hängt ein wenig davon ab, was genau du tust und wie du die Transaktion handelst (explizit oder implizit) Mehr HERE

+0

Ich handle nur explizite Transaktionen. –

8

Keine verwenden, brauchen Sie keine explizite Transaktionen, wenn Transaction für Ihre Transaktionen - jedoch: wichtig sollten Sie wahrscheinlich Transaction Binding=Explicit Unbind; in der Verbindungszeichenfolge festlegen. Die vollständigen Details sind here, aber ansonsten können Sie damit enden, dass die ersten paar Operationen rückgängig gemacht werden und die letzten paar Commits (oder vielmehr, außerhalb jeder Transaktion ausgeführt werden).

1

Wenn Sie ein in TransactionScope oder CommittableTransaction eingetragen werden, dann würde ich empfehlen, dass Sie tun NICHT explizit Ihre eigenen lokalen Transaktionen erstellen begin transaction oder SqlConnection.BeginTransaction verwenden.

TransactionScope/CommittableTransaction sind eine andere 'Familie' und sich gegenseitig aus aus begin transaction/SqlTransaction

Deshalb würde ich mit Saif Khan nicht einverstanden sind. Es ist wahr, dass System.Transactions Leistungsprobleme in Sql 2000 hat, daher ist es besser, stattdessen SqlTransaction oder begin transaction zu verwenden. Wenn Sie das tun, sollten Sie jedoch auch kein TransactionScope/CommitableTransaction verwenden.

Übrigens wurde das Verhalten, das Marc Gravell beschrieben hat, in .NET 4.0 geändert. Auch wenn Sie Explizit Unbind nicht verwenden, ist es nicht länger möglich, einige Befehle rückgängig zu machen und einige zu committen. (Allerdings hat er Recht, dass in älteren Versionen Explicit Unbind verwendet werden sollte).

Verwandte Themen