2009-11-03 8 views
6

moje pytanie jest jak obsłużyć wyjątek sql w języku C#, czy istnieje, aby sprawdzić, jaki rodzaj wyjątków sql rzuca z warstwy dostępu do danych? Na przykład, jeśli db rzuca wyjątkowy wyjątek ograniczenia lub wyjątek klucza obcego, czy istnieje sposób, aby go złapać z C#? jaki jest schemat obsługi wyjątków, którego używasz w tym wyjątku db?Jak obsługiwać określone wyjątki SQL (na przykład wyjątkowe naruszenie ograniczenia) w języku C#?

Odpowiedz

0

Złap SQLException

catch(SqlException ex) 
{ 
    foreach(SqlError error in ex.Errors) 
    { 

    } 
} 
1

można sprawdzić wiadomość tekstową, numer i nie przełączać sprawę na nim wiedzieć błąd ...

try { 
} 
catch (SqlException ex) 
{ 
string str; 
     str = "Source:"+ ex.Source;   
     str += "\n"+ "Number:"+ ex.Number.ToString(); 
     str += "\n"+ "Message:"+ ex.Message; 
     str += "\n"+ "Class:"+ ex.Class.ToString(); 
     str += "\n"+ "Procedure:"+ ex.Procedure.ToString(); 
     str += "\n"+ "Line Number:"+ex.LineNumber.ToString(); 
     str += "\n"+ "Server:"+ ex.Server.ToString(); 

     Console.WriteLine (str, "Database Exception"); 
} 
7

Wystarczy popatrzeć na klasy documentation of the SqlException, w szczególności , na przykład, na przykład, powinno pozwolić ci na określenie, który typ wyjątku SqlException (unikalne ograniczenie, klucz obcy, ...) wystąpił.

Możesz użyć filtrowanych wyjątków, aby wychwycić określone błędy. VB.NET:

Try 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
Catch ex as SqlException When ex.Number = ... 
    ... 
End Try 

C# (wersja 6 i powyżej):

try 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
catch (SqlException ex) when (ex.Number == ...) 
{ 
    ... 
} 
1

To zależy od wyjątku i Twojego systemu bazodanowego. Baza danych będzie generować unikalny kod błędu dla konkretnych rzeczy, takich jak ograniczenia, uprawnienia itp., Ale ten kod błędu waha się od DB do DB. Oracle ma MASYWNY pdf (2000+ stron), który wymienia każdy możliwy błąd, który może rzucić i jestem pewien, że Sqlserver ma coś podobnego. Chodzi mi o to, że szukasz określonych kodów błędów, musisz trp tylko tych w sekcji catch i obsługiwać je inaczej niż wiele innych błędów, które możesz dostać.

Powiązane problemy