Tôi đã triển khai SqlTransaction
trong C# để bắt đầu, giao dịch và quay lại. Mọi thứ đang diễn ra đúng, nhưng tôi đã gặp một số vấn đề trong khi truy cập những bảng có liên quan trong quá trình giao dịch. Tôi không thể đọc bảng trong giao dịch (các bảng đang giao dịch). Trong khi tìm kiếm về điều này, tôi thấy rằng nó xảy ra do một khóa độc quyền. Bất kỳ sự lựa chọn tiếp theo nào trên dữ liệu đó đều phải đợi cho đến khi khóa độc quyền được giải phóng. Sau đó, tôi đã trải qua mọi mức cô lập được cung cấp bởi SqlTransaction
, nhưng nó không hoạt động. Vì vậy, tôi cần phải giải phóng khóa độc quyền trong khi giao dịch để người dùng khác có thể truy cập trên bảng đó và có thể đọc dữ liệu. Có phương pháp nào để đạt được điều này không? Cảm ơn trước.Mức cách ly trong Giao dịch Sql
Dưới đây là C# mã của tôi cho giao dịch
try
{
SqlTransaction transaction = null;
using (SqlConnection connection=new SqlConnection(Connection.ConnectionString))
{
connection.Open();
transaction=connection.BeginTransaction(IsolationLevel.Snapshot,"FaresheetTransaction");
//Here all transaction occurs
if (transaction.Connection != null)
{
transaction.Commit();
transaction.Dispose();
}
}
}
catch (Exception ex)
{
if (transaction.Connection != null)
transaction.Rollback();
transaction.Dispose();
} `
Mã này đang làm việc tốt, nhưng vấn đề là khi tôi truy cập vào dữ liệu của bảng (những người truy cập trong thời gian giao dịch) trong suốt thời gian thực hiện giao dịch. Các bảng đang được truy cập bởi các phần khác của ứng dụng. Vì vậy, khi tôi cố gắng đọc dữ liệu từ bảng, nó ném một ngoại lệ.
ý định của bạn là gì đây? Không không mất khóa khi cập nhật? hoặc cho những độc giả khác bỏ qua ổ khóa (có lý do chính đáng) –
Tôi không muốn khóa trong bảng đã giao dịch cho người dùng khác .... giao dịch có thể kéo dài trong thời gian giao dịch, mười nghìn dữ liệu chèn vào bảng nên có thể mất nhiều thời gian ... Vì vậy, trong thời gian tran saction, tôi muốn người dùng khác có quyền truy cập vào bảng đó và có thể đọc dữ liệu ....... –