2012-03-30 23 views
5

凡在.NET System.Data命名空間是確定,執行更新命令時的代碼,無論是行在SQL Server 2K表已經改變了客戶端程序已經在閱讀後,即該行的客戶端版本爲「過時」?.NET System.Data命名空間編譯:我在哪裏可以找到的代碼與SQL服務器併發衝突

我想用一個反編譯看看代碼,弄清它是如何確定併發衝突發生。我知道這將有事可做與表和/或@@ ROWCOUNT timestamp列,但我想看看是什麼原因,當包裹在一個存儲過程的更新命令是由庫執行上會。

存儲的過程將有這樣的結構:

   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 

也就是說,沒有行會,如果它已經因爲其rowversion在客戶端System.Data比較where子句的改變更新。 DataRow設置爲數據庫中行的時間戳值,proc將成功運行並且不會生成錯誤。然而,SqlClient庫在幫助中將這種情況報告爲併發衝突。

感謝

+0

您使用的是'SqlDataAdapter'?你打電話過得怎麼樣?你想通過找到這個源代碼來實現什麼,繞過併發衝突錯誤? – 2012-04-08 20:10:20

+0

@Jordão:我想知道要拋出錯誤的必要條件,即圖書館是比較時間戳值還是僅查看受影響記錄的數量。 – Tim 2012-04-10 18:42:44

回答

0

我在System.Data.Common.DbDataAdapter.cs中找到了相關的代碼 - 當受影響的記錄數爲零時引發併發衝突。

2

除了使用反編譯的,看看真正的代碼。詳細信息請參閱以下博客文章。 http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

+0

到目前爲止,無法找到「下載源代碼」鏈接。 – Tim 2012-04-09 18:12:48

+1

找到它了:http://referencesource.microsoft.com/netframework.aspx – Tim 2012-04-09 18:14:01

+0

@Attila Ozgur:謝謝你的幫助。讓我通過實際的源代碼進行搜索,最終找到了答案。我看到SO網站自動給你50%的賞金。 – Tim 2012-04-16 18:08:23

相關問題