Tôi có một số mã C# hiện có mà tôi muốn hiển thị qua com interop để nó có thể được gọi từ Excel VBA. Như tôi sẽ được thực hiện nhiều hoạt động cập nhật hàng loạt lồng nhau, tôi cần phải hỗ trợ giao dịch, và để giảm thiểu refactoring cần ở cấp C#, tôi muốn sử dụng cách tiếp cận TransactionScope:Bắt đầu một TransactionScope từ Excel VBA?
Thực hiện một giao dịch ngầm sử dụng Phạm vi giao dịch
http://msdn.microsoft.com/en-us/library/ms172152.aspx
lớp TransactionScope cung cấp một cách đơn giản để đánh dấu một khối mã như tham gia vào một giao dịch, mà không đòi hỏi bạn tương tác với các giao dịch riêng của mình. Phạm vi giao dịch có thể chọn và tự động quản lý giao dịch môi trường xung quanh. Do dễ sử dụng việc sử dụng và hiệu quả, bạn nên sử dụng lớp TransactionScope khi phát triển ứng dụng giao dịch.
Ngoài ra, bạn không cần phải tranh thủ tài nguyên một cách rõ ràng với giao dịch . Bất kỳ trình quản lý tài nguyên nào của System.Transactions (chẳng hạn như SQL Server 2005) có thể phát hiện sự tồn tại của một giao dịch xung quanh được tạo bởi phạm vi và tự động tranh thủ.
Câu hỏi của tôi là: là nó có thể khởi các TransactionScope trong mã VBA (hoặc gọi aC# phương pháp thông qua COM Interop để nhanh chóng và trả về một đối tượng TransactionScope), và sau đó tiến hành để gọi khác nhau khác C# đối tượng qua COM Interop, tất cả sẽ tự động tham gia vào giao dịch root đơn lẻ?
Không, bạn chắc chắn không thể làm điều đó trong VBA. –
Bạn có thể xây dựng (hy vọng tôi không kinda yêu cầu bạn chứng minh một tiêu cực) – tbone
Tôi đã xóa câu trả lời của tôi vì tôi không nghĩ rằng chúng tôi đang trên cùng một trang hiểu những gì TransactionScope là cho C# và những gì nó sẽ được trong VBA. ADODB thực hiện cơ chế để quay trở lại bất kỳ thay đổi nào trong một Giao dịch nhưng bạn không thể bao bọc một khối của bất kỳ mã VBA nào trong một TransactionScope và có nó quay lại nếu Giao dịch thất bại ... –