Trong không gian tên .NET System.Data là mã xác định, khi lệnh cập nhật được thực hiện, cho dù một hàng trong một bảng SQL Server 2K đã được thay đổi sau khi chương trình khách hàng đã đọc nó, tức là phiên bản phía máy khách của hàng là "cũ"?.NET System.Data không gian tên decompilation: nơi tôi có thể tìm thấy mã liên quan đến hành vi vi phạm đồng thời SQL Server
Tôi muốn sử dụng trình biên dịch ngược để xem mã và tìm hiểu cách xác định rằng vi phạm đồng thời đã xảy ra. Tôi biết nó sẽ có một cái gì đó để làm với một cột dấu thời gian trong bảng và/hoặc @@ rowcount nhưng tôi muốn xem chỉ là những gì đang xảy ra khi một lệnh cập nhật bọc trong một proc được lưu trữ được thực thi bởi thư viện.
Các proc được lưu trữ sẽ có cấu trúc này:
create proc foo_update
@id int,
@rowversion timestamp,
@val varchar(5)
as
begin
update foo set a = @val
where id = @id and mytimestampcolumn = @rowversion;
end
Đó là, không có hàng sẽ được cập nhật nếu nó đã thay đổi vì các mệnh đề where mà so sánh rowversion trong System.Data client-side. DataRow đến giá trị dấu thời gian của hàng trong cơ sở dữ liệu, và proc sẽ chạy thành công và không tạo ra lỗi. Tuy nhiên, các thư viện SqlClient, trong sự hữu ích của họ, báo cáo kịch bản này là một sự vi phạm đồng thời.
Cảm ơn
Bạn đang sử dụng 'SqlDataAdapter'? Bạn gọi nó như thế nào? Bạn muốn đạt được điều gì bằng cách tìm mã nguồn này, bỏ qua lỗi vi phạm đồng thời? –
@ Jordão: Tôi muốn xem điều kiện nào là cần thiết cho lỗi được ném, nghĩa là thư viện có so sánh giá trị dấu thời gian hay chỉ đơn giản là xem số lượng bản ghi bị ảnh hưởng. – Tim