Tôi đã có một IDbTransaction trong một tuyên bố sử dụng nhưng tôi không chắc chắn nếu nó sẽ được cuộn lại nếu một ngoại lệ được ném trong một tuyên bố sử dụng. Tôi biết rằng một tuyên bố sử dụng sẽ thực thi các kêu gọi của Dispose() ... nhưng không ai biết nếu cùng là đúng cho Rollback()?Một câu lệnh sử dụng có hoàn trả một giao dịch cơ sở dữ liệu nếu xảy ra lỗi không?
Cập nhật: Ngoài ra, tôi có cần gọi Commit() một cách rõ ràng như tôi có bên dưới hoặc cũng sẽ được quản lý bằng câu lệnh sử dụng không?
Mã của tôi trông loại như thế này:
using Microsoft.Practices.EnterpriseLibrary.Data;
...
using(IDbConnection connection = DatabaseInstance.CreateConnection())
{
connection.Open();
using(IDbTransaction transaction = connection.BeginTransaction())
{
//Attempt to do stuff in the database
//potentially throw an exception
transaction.Commit();
}
}
Xin chào, chỉ cần làm rõ trường hợp "cam kết". Nó là khóa học bắt buộc bởi vì, using() {} chỉ cần gọi phương thức Dispose(). Lớp Transaction.Dispose không thể biết nó có nên Commit hay Dispose nếu Commit cũng tự động không :) –
Xem thêm http://stackoverflow.com/questions/6418992/is-it-a-better-practice-to-explicitly -call-transaction-rollback-or-let-an-except – nawfal