2009-11-03 19 views
6

la mia domanda è come gestire l'eccezione sql in C#, c'è comunque un modo per verificare quale tipo di eccezione sql getta dal livello di accesso ai dati? Ad esempio, se db lancia un'eccezione di limitazione univoca, o un'eccezione di chiave esterna, esiste un modo per catturarla da C#? qual è il modello di gestione delle eccezioni che stai utilizzando per queste eccezioni db?Come si gestiscono eccezioni SQL specifiche (ad esempio, una violazione del vincolo univoco) in C#?

risposta

0

Cattura SqlException

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

    } 
} 
1

è possibile controllare il testo del messaggio, numero e si fa passare caso su di esso per conoscere l'errore ...

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

Dai un'occhiata alla classe documentation of the SqlException, in particolare , al suo properties: SqlException.Number, ad esempio, dovrebbe consentire di identificare quale tipo di SqlException (vincolo univoco, chiave esterna, ...) si è verificato.

È possibile utilizzare le eccezioni filtrate per rilevare errori specifici. VB.NET:

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

C# (versione 6 o superiore):

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

Dipende l'eccezione e terminale database. Il database produrrà un codice di errore univoco per cose specifiche come vincoli, permessi, ecc. Ma che il codice di errore varia da DB a DB. Oracle ha un pdf MASSIVE (2000+ pagine) che elenca ogni possibile errore che può generare e sono certo che Sqlserver ha qualcosa di simile. Il mio punto è che stai cercando codici di errore specifici, quindi devi solo quelli nella sezione di cattura e gestirli diversamente dalla moltitudine di altri errori che puoi ottenere.

Problemi correlati