2012-03-30 13 views
5

.NET System.Data ad alanında, güncelleme komutunun çalıştırıldığı sırada, satır içinde olup olmadığını belirleyen koddur. İstemci programı okuduktan sonra SQL Server 2K tablosu değiştirildi, yani satırın istemci tarafındaki sürümü "eski" mi?.NET System.Data ad alanı decompilation: SQL Server eşzamanlılık ihlalleri ile ilgili kodu nereden bulabilirim

Kodu incelemek ve eşzamanlılık ihlali olduğunu nasıl belirlediğini belirlemek için bir decompiler kullanmak istiyorum. Tabloda ve/veya @ rowcount'taki bir zaman damgası sütunu ile ilgili bir şey olacağını biliyorum, ancak depolanmış bir proba sarılı bir güncelleme komutu kütüphane tarafından yürütüldüğünde neler olduğunu görmek istiyorum.

saklı proc bu yapıya sahip olacaktır:

çünkü istemci tarafında System.Data içinde rowversion karşılaştırır nerede fıkra değiştiyse, hiçbir satır güncellenir edilir
   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 

. Veritabanındaki satırın zaman damgası değerine DataRow ve proc başarıyla çalıştı ve bir hata oluşturmaz. Yine de SqlClient kütüphaneleri, yardımcı olmaları bakımından bu senaryoyu eş zamanlı bir ihlal olarak rapor eder.

Teşekkür

yerine Decompiler kullanmanın
+0

'SqlDataAdapter' kullanıyor musunuz? Nasıl arıyorsun? Bu kaynak kodu bularak, eşzamanlılık ihlali hatasını atlayarak ne elde etmek istiyorsunuz? –

+0

@ Jordão: Hatanın atılması için hangi koşulların gerekli olduğunu, yani kütüphanenin zaman damgası değerlerini karşılaştırarak mı yoksa yalnızca etkilenen kayıtların sayısına bakıp bakmadığını görmek istedim. – Tim

cevap

0

İlgili kodu System.Data.Common.DbDataAdapter.cs içinde buldum - etkilenen kayıtların sayısı sıfır olduğunda eşzamanlılık ihlali ortaya çıkar.

2

, gerçek kodu inceleyin. Ayrıntılar için aşağıdaki blog gönderisine bakın. http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

+0

Şimdiye kadar 'indirme kaynak kodu' bağlantısını bulamıyoruz. – Tim

+1

Bulunamadı: http://referencesource.microsoft.com/netframework.aspx – Tim

+0

@Attila Özgür: Yardımın için teşekkürler. Aramak için gerçek kaynak koduna sahip olmak, sonunda cevaba yönlendirdi. SO web sitesinin size ödülün% 50'sini otomatik olarak verdiği görüyorum. – Tim

İlgili konular