2012-03-30 24 views
5

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

+0

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? –

+0

@ 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

Trả lời

0

Tôi đã tìm thấy mã có liên quan trong System.Data.Common.DbDataAdapter.cs - vi phạm đồng thời được tăng lên khi số lượng bản ghi bị ảnh hưởng bằng 0.

2

Thay vì sử dụng trình biên dịch ngược, hãy xem mã thực. xem bài đăng trên blog sau đây để biết chi tiết. http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

+0

Cho đến nay, không thể tìm thấy liên kết 'mã nguồn tải xuống'. – Tim

+1

Tìm thấy: http://referencesource.microsoft.com/netframework.aspx – Tim

+0

@Attila Ozgur: Cảm ơn sự giúp đỡ. Có mã nguồn thực sự để tìm kiếm thông qua dẫn tôi cuối cùng để trả lời. Tôi thấy trang web SO trao cho bạn 50% tiền thưởng tự động. – Tim

Các vấn đề liên quan