Nasıl SqlException kilitlenmeye neden yakalamak için? | Netgez.com
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

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • michellefeng's channel

    michellefeng

    26 Kasım 2006
  • NextGenWindows

    NextGenWindo

    8 Kasım 2011