2011-01-28 19 views
7

Veritabanı işlemleri yaparken farklı sorunları ele almak istiyorum.SqlException neden olduğu için gerçek sorun nasıl bilinir?

örn. İşlem yanlış veritabanı kimlik bilgileri nedeniyle veya ağ sorunu nedeniyle başarısız olabilir. Ya da sorgu doğru olmadığından başarısız olabilir (dize değeri int tür sütunda iletiliyorsa)

C# kodumda, yalnızca SqlErrors koleksiyonuna sahip SqlException var. Ancak birçok şiddet seviyesi vardır.

SqlException'ın nedenini kolayca nasıl tanımlayabilirim? Özel durumun, bağlantı sorunu veya kimlik doğrulama hatası nedeniyle veya sorgudaki sorun nedeniyle nasıl belirlenebilir.

Ben SQL Server kullanıyorum 2005.

+0

Ben de bir genel amaçlı çözüm için ulaşmaya çalıştı. Amacım, son kullanıcıya daha kullanıcı dostu hata mesajları sunmaktı. Şimdiye kadar hiçbir çalışma çözümü buldum. –

cevap

9

Böyle bir şey deneyin, bu farklı koşulları ele almada size yardımcı olacaktır.

kullanımı böyle bir deneyin catch bloğu:

try  
{ 
    ... 
    ... 
} 
catch (SqlException ex) 
{ 
    switch (ex.Number) 
    { 
     case 4060: // Invalid Database 
        .... 
        break; 

     case 18456: // Login Failed 

        .... 

        break; 

     case 547: // ForeignKey Violation 

        .... 

        break; 

     case 2627: 
       // Unique Index/ Primary key Violation/ Constriant Violation 

        .... 

        break; 

     case 2601: // Unique Index/Constriant Violation 

        .... 

        break; 

     default: 

        .... 

        break;  

     } 
} 
+2

Yorumlanan nedenlerden dolayı bu belirli sayıları nereden aldınız? Ağ başarısızlığı vb. Gibi birkaç nedenden dolayı böyle numaralar istiyorum. SQL'deki mesajların sistem tablosu binlerce mesaj verir ve bu benim için oldukça kullanışlı değildir. – Learner

+0

@CSharpLearner: Blogum ve projemdeki önceki kod gibi çeşitli kaynaklardan bu hata mesajlarını aldım. Bu hata kodlarını veritabanınızdan alabilir misiniz? Bu soruyu "SELECT * FROM sysmessages" yazarak deneyin – JPReddy

+0

@CSharpLearner: wow, Bu gerçekten çok yardımcı olacağını düşünüyorum – JPReddy

1

SQLException size önem düzeyi vermelidir özelliği Class ortaya çıkarır.

Daha fazla bilgi için here.