2008-10-09 27 views
5

Tôi hiện đang viết một ứng dụng yêu cầu nhiều lần chèn, cập nhật và xóa cho thực thể nghiệp vụ của tôi. Tôi đang sử dụng lớp TransactionScope để đảm bảo tất cả các thủ tục được lưu trữ có thể cam kết hoặc quay trở lại như một đơn vị công việc duy nhất.Lớp giao dịch .NET và T-SQL TRAN COMMIT và ROLLBACK

Câu hỏi của tôi là, tôi bắt buộc phải sử dụng COMMIT TRAN và ROLLBACK TRAN là mỗi thủ tục được lưu trữ của tôi nếu tôi đang sử dụng lớp TransactionScope trong thư viện lớp .NET của tôi?

Trả lời

2

Vào năm 2005, không cần thiết, vào năm 2000, tôi cũng đặt giao dịch trong một "sử dụng" khối.

Có một số vấn đề hiệu suất khi sử dụng nó vào năm 2000 và cũ vs 2005.

Xem here

Cảm ơn

+0

Tôi đang sử dụng SQL Server 2005. Cảm ơn thông tin –

0

Bạn không cần phải - nó sẽ được xử lý trong TransactionScope. Nó phụ thuộc một chút là chính xác những gì bạn đang làm và cách bạn xử lý giao dịch (rõ ràng hoặc tiềm ẩn) Thêm HERE

+0

Tôi chỉ xử lý các giao dịch rõ ràng. –

8

Không, bạn không cần phải giao dịch rõ ràng nếu sử dụng TransactionScope cho các giao dịch của bạn - tuy nhiên: quan trọng bạn có thể nên đặt Transaction Binding=Explicit Unbind; trong chuỗi kết nối. Các chi tiết đầy đủ là here, nhưng nếu không bạn có thể kết thúc với một vài thao tác đầu tiên được khôi phục và số ít nhất cam kết (hoặc đúng hơn, chạy bên ngoài bất kỳ giao dịch nào).

1

Nếu bạn đang gia nhập vào một TransactionScope hoặc CommittableTransaction sau đó tôi sẽ khuyên bạn làm KHÔNG tạo một cách rõ ràng các giao dịch địa phương của riêng bạn sử dụng begin transaction hoặc SqlConnection.BeginTransaction.

TransactionScope/CommittableTransaction là một 'gia đình' khác nhau và loại trừ lẫn nhau từ begin transaction/SqlTransaction

Vì vậy, tôi sẽ không đồng ý với Saif Khan. Đúng là System.Transactions có các vấn đề về hiệu năng trên Sql 2000, vì vậy có thể tốt hơn nếu sử dụng SqlTransaction hoặc begin transaction thay thế. Tuy nhiên, nếu bạn làm điều đó thì bạn cũng KHÔNG nên sử dụng TransactionScope/CommunableTransaction.

Nhân tiện, hành vi mà Marc Gravell mô tả đã được thay đổi trong .Net 4.0. Thậm chí nếu bạn không sử dụng Explicit Unbind, nó không còn có thể có một số lệnh được khôi phục và một số lệnh đã cam kết. (Tuy nhiên, ông là chính xác rằng trong các phiên bản cũ hơn, bạn nên sử dụng Explicit Unbind).

Các vấn đề liên quan