Forum

SQL Server'da kayıt...
 
Bildirimler
Hepsini Temizle

SQL Server'da kayıt kilitleme (lock) problemi.

2 Yazılar
2 Üyeler
0 Reactions
878 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Arkadaşlar bu konu daha önce fcelik# arkadaşımız tarafından açıldı ancak verilen cevapları okuyunca konuyu tam anlayamıyorum. Problemim aşağıda sorulan sorunun aynısı. C# tarafında bir kullanıcının SQL server'den çekip form da gösterdiği bir kaydı başka bir kullanıcı çekerken bu kayıt başka bir kullanıcı tarafından açılmış mesajı verdirerek açılmamasını istiyorum.  Soru aşağıda daha detaylı sorulmuş. Ben verilen cevaplardan bir sonuca ulaşamadım. Lütfen yardımcı olur musunuz? Teşekkürler....

fcelik# arkadaşımızın sorduğu soru.  

Merhaba arkadaşlar;

Veritabanını SQL Server'da tutan bir yazılım geliştireceğim ve şu anda ön etüdlerimi yapıyorum. Sorum kayıt kilitleme konusu ile ilgili. Yerli ve yabancı dökümanlara göz attım (transaction, isolation level, nolock, rowlock, holdlock bla bla bla) ancak tam olarak istediğim sonucu alamadım. Uygulamamda (C# Windows Application) yapmak istediğim şey şu;

1 - clientA - connA - mevcut kayıtlardan bir kayıt seçecek (SELECT * FROM t1 WITH(rowlock veya nasıl bir kilit komutu ?) WHERE id=1) ve çekilen kaydı form üzerinde ilgili alanlara bind edecek. Buraya kadar sorun yok.

2- clientB - connB - aynı formda aynı kayıt için (WHERE id=1) aynı işlemi yapamayacak. Kaydı çağırmak istediğinde kayıt x kullanıcı veya x idli connection tarafından kilitlenmiş uyarısını (exception oluşacak) verecek. Ne zamanki connA işini bitirecek (formu kapatacak veya gerekli değişiklikleri UPDATE edecek) yada bağlantısını sonlandıracak (bu durumda kilit yine serbest kalacak) connB düzenleme için kaydı alabilecek. Burada şöyle bir soru sorabilirsiniz. "connA kaydı forma aldıktan sonra formu açık unutursa o kayıt asla seçilemeyecek ve kullanıcının update yapması yada formu kapatması gerekecek", evet doğrudur aynen istediğim şey bu. UPDATE amacı ile forma çağırılan satır kilitlenecek ve kilitleyen bağlantı kapatılana kadar kilitli kalacak. Çıkan uyarıda (exception) connection id veya terminal id, ip si vs. gibi herhangi birinin bilgisini istememin sebebide diğer kullanıcılar ilgili kişiyi uyarabilsin diye.

Yardımcı olan arkadaşlara şimdiden teşekkürler...

 
Gönderildi : 06/11/2014 16:31

(@mehmetyayla)
Gönderiler: 550
Honorable Member
 

NOWAIT SQL diye bir prosedür duydun mu ?

Google'da aratabilirsin 

 
Gönderildi : 07/11/2014 19:25

Paylaş: