Tôi đã tạo kết nối sql, CN1. Sau đó, CN1 này được mở ra. Sau đó trong mã có một giao dịch. Nếu tôi thực hiện một lệnh sql trên kết nối CN1 này, điều này có trong giao dịch không?Điều quan trọng là phải mở kết nối sql trong giao dịch
Mã trông như thế này;
SqlConnection cn1 = new SqlConnection();
cn1.Open(); //connection opened when there is no ambient transaction.
...
using(TransactionScope scope = new TransactionScope())
{
SqlCommand cmd; //a typical sql command.
...
cmd.ExecuteNonQuery(); //Is this command within transaction?
...
}
có giải pháp nào để giải quyết vấn đề này trong giao dịch ngoài kết nối sql mở trong giao tác? Có thể phương pháp Enlist hữu ích về điều này không? – mkus
mkus, vâng, bạn có thể sử dụng phương thức 'SqlConnection' instance' EnlistTransaction (Transaction.Current); 'để tranh thủ một kết nối đã mở trong một phạm vi giao dịch. Vì vậy, nói rằng * PHẢI * được mở trong TransactionScope là không đúng, mặc dù đó là cách cơ chế tự động được cho là được sử dụng. Ngoài ra, mở kết nối bên trong phạm vi thậm chí không đảm bảo kết nối sẽ được nhập ngũ, vì chuỗi kết nối có thể chỉ định "Enlist = false". Thông thường, tùy chọn đó không được chỉ định, nhưng đó là điều cần biết và kiểm tra. Xem http://stackoverflow.com/a/2886326/88409 – Triynko