Nasıl SqlException kilitlenmeye neden yakalamak için?
Bir .3.5 / NET C# uygulaması, SqlException
ama yakalamak istiyorumeğer kilitlenme neden olurbir SQL Server 2008 örnek.
Tipik bir hata iletisi Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Yine de, bu özel durum için error code belgelenmiş olmak görünmüyor.
Bu durum karşı özel filtrelemekilitlenmemesajın anahtar kelime bu davranış elde etmek için çok çirkin bir şekilde görünüyor. Birileri bu işi yapmak için doğru yolu biliyor mu?
CEVAP
Kilitlenme için SQL hata kodu SqlException işlemek ve kontrol etmek için gerek 1205. Örneğin eğer SqlException tüm diğer türleri için çok kabarcık dışında istediğiniz:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Belirli bir ileti için gerçek SQL hata kodu bulmak için çok kullanışlı bir şey sys bakmaktır.SQL Server iletileri.
örneğin
SELECT * FROM sys.messages WHERE text LIKE 'Þadlock%' AND language_id=1033
Kilitlenmeleri işlemeye alternatif bir yöntem (SQL Server 2005 ve üzeri), saklı yordam bir TRY...CATCH destek kullanarak içinde bunu yapmak için:
BEGIN TRY
-- some sql statements
END TRY
BEGIN CATCH
IF (ERR_NUMBER() = 1205)
-- is a deadlock
ELSE
-- is not a deadlock
END CATCH
Kilitlenme mantık SQL içinde tamamen hayata yeniden nasıl MSDN 9* *tam bir örnek var.
Neden eğer sözlük anahtarı varsa kontr...
Nasıl mockito ile belirli türde bir li...
bir Textbox içinde SEKME tuş yakalamak...
Nasıl Pencereyi Kapat olay yakalamak i...
Neden ve Nasıl Olay İşleyicisi bellek ...