SORU
13 ŞUBAT 2010, CUMARTESİ


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
13 ŞUBAT 2010, CUMARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gan Eden Productions

    Gan Eden Pro

    11 HAZİRAN 2011
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011