2011-01-28 7 views
7

Desidero gestire diversi problemi mentre eseguo le operazioni di database in modo diverso.Come conoscere il problema reale a causa del quale viene lanciata SqlException?

ad es. L'operazione potrebbe non riuscire a causa di credenziali di database errate o di problemi di rete. Oppure potrebbe non riuscire perché la query non è corretta (se il valore stringa viene passato nella colonna di tipo int)

Nel mio codice C#, abbiamo solo SqlException che ha la raccolta di SqlErrors. Tuttavia ci sono molti livelli di gravità.

Come posso identificare facilmente la causa di SqlException? Come posso determinare l'eccezione è a causa del problema di connettività o errore di autenticazione o a causa del problema con la query.

Sto usando SQL Server 2005.

+0

ho cercato di raggiungere per una soluzione di uso generale, anche. Il mio obiettivo era presentare più messaggi di errore user-friendly all'utente finale. Finora non ho trovato nessuna soluzione funzionante. –

risposta

9

Prova in questo modo, questo ti aiuterà a gestire condizioni diverse.

uso di un blocco try cattura in questo modo:

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

Da dove hai preso questi numeri specifici per i motivi commentati? Voglio questi numeri per alcuni altri motivi, come failuer di rete, ecc. La tabella dei messaggi di sistema in SQL fornisce migliaia di messaggi e quindi non è abbastanza utile per me. – Learner

+0

@CSharpLearner: Ho ricevuto questi messaggi di errore da varie fonti come blog e codice precedente nel mio progetto ecc. Potresti ottenere questi codici di errore dal tuo database, prova questa query "SELECT * FROM sysmessages" – JPReddy

+0

@CSharpLearner: wow, Questo aiuterà davvero molti a pensare – JPReddy

1

SQLException espone la proprietà Class che dovrebbe dare il livello di gravità.

Ulteriori informazioni here.

Problemi correlati