2008-10-09 11 views
5

Aktualnie piszę aplikację, która będzie wymagać wielu wstawek, aktualizacji i usuwania dla mojej jednostki biznesowej. Korzystam z klasy TransactionScope, aby zagwarantować, że wszystkie procedury przechowywane mogą zostać zatwierdzone lub wycofane jako jedna jednostka pracy.. NET TransactionScope i T-SQL TRAN COMMIT i ROLLBACK

Moje pytanie brzmi: jestem również zobowiązany do korzystania z funkcji COMMIT TRAN i ROLLBACK TRAN to każda z moich procedur przechowywanych, jeśli używam klasy TransactionScope w mojej bibliotece klasy .NET?

Odpowiedz

2

W 2005 roku nie jest to konieczne, w 2000 roku, ja też, zwykle, umieściłbym transakcje w "używając" bloku.

Istnieją pewne problemy z wydajnością podczas używania go na 2000 i starsze vs 2005.

Zobacz here

Dzięki

+0

Używam programu SQL Server 2005. Dzięki za informacje –

0

Nie powinieneś tego robić - powinien być obsługiwany w ramach TransactionScope. To zależy trochę od tego, co dokładnie robisz i jak sobie z nimi radzisz (jawne lub ukryte). Więcej HERE

+0

Obsługuję tylko jawne transakcje. –

8

Nie, nie trzeba jawnych transakcji w przypadku korzystania TransactionScope dla transakcji - jednak: ważne powinieneś ustawić Transaction Binding=Explicit Unbind; w ciągu połączenia. Pełne szczegóły to here, ale w przeciwnym razie można uzyskać pierwsze kilka operacji wycofania, a ostatnie kilka zatwierdzenia (lub raczej uruchamiania poza jakąkolwiek transakcją).

1

Jeśli zaciągnął w TransactionScope lub CommittableTransaction to bym zdecydowanie zaleca się zrobić NIE jawnie tworzyć własne transakcje lokalne za pomocą begin transaction lub SqlConnection.BeginTransaction.

TransactionScope/CommittableTransaction są różne 'rodziny' i wzajemnie się wykluczają z begin transaction/SqlTransaction

Dlatego chciałbym zgadzam się z Saif Khan. To prawda, że ​​System.transactions ma problemy z wydajnością w Sql 2000, więc może lepiej użyć SqlTransaction lub begin transaction. Jeśli jednak to zrobisz, NIE powinieneś również używać TransactionScope/CommittableTransaction.

Nawiasem mówiąc, zachowanie opisane przez Marc Gravell zostało zmienione w .Net 4.0. Nawet jeśli nie używasz opcji Explicit Unbind, nie można już wycofać niektórych poleceń, a niektóre zatwierdzić. (Jednak ma rację, że w starszych wersjach powinieneś używać Explicit Unbind).

Powiązane problemy