2011-01-28 11 views
7

Quiero manejar diferentes problemas, al hacer operaciones de base de datos, de manera diferente.¿Cómo saber el problema real por el cual se lanza SqlException?

p. Ej. La operación puede fallar debido a credenciales incorrectas de la base de datos o debido a un problema de red. O puede fallar porque la consulta no es correcta (si el valor de cadena se está pasando en la columna de tipo int)

En mi código C#, solo tenemos SqlException que tiene una colección de SqlErrors. Sin embargo, hay muchos niveles de gravedad.

¿Cómo puedo identificar fácilmente la causa de la SqlException? Cómo puedo determinar la excepción es debido al problema de conectividad o falla de autenticación o debido al problema con la consulta.

estoy usando SQL Server 2005.

+0

me trató de llegar a una solución de propósito general, también. Mi objetivo era presentar mensajes de error más fáciles de usar para el usuario final. No encontré ninguna solución de trabajo hasta ahora. –

Respuesta

9

Pruebe algo como esto, esto lo ayudará a manejar diferentes condiciones.

uso de un bloque intento de captura de esta manera:

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

¿De dónde obtuviste estos números específicos por las razones comentadas? Quiero esos números por algunas razones más, como el error de red, etc. La tabla de mensajes del sistema en SQL da miles de mensajes, por lo que no es muy útil para mí. – Learner

+0

@CSharpLearner: recibí este mensaje de error de varias fuentes como blogs y un código anterior en mi proyecto, etc. Puede ser que pueda obtener estos códigos de error de su base de datos, pruebe esta consulta "SELECT * FROM sysmessages" – JPReddy

+0

@CSharpLearner: wow, eso realmente ayudará a muchos Creo que – JPReddy

1

SQLException expone la propiedad Class que debe dar el nivel de gravedad.

Más información here.

Cuestiones relacionadas