2011-11-15 10 views
5

que estoy tratando de volver mensaje de error fácil de usar cuando una excepción es lanzada MySQL en C#. Actualmente estoy devolviendo el mensaje de excepción, pero ese mensaje no es muy fácil de usar. Así que me preguntaba si alguno de ustedes tenía algún truco que no requiriera un análisis regex de los mensajes de error recibidos para mostrarlos al usuario de una manera que tuviera sentido para ellos.Hacer errores de MySQL atrapados en C# fácil de usar

Estoy tratando de mantenerse alejado de código de validación complejo antes de insertar/actualizar/borrar un registro pero que parece ser la única manera ... a menos que sepa mejor!

+2

Cada error de MySQL tiene un código de error: http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html Usted puede escribir sus propios mensajes de error para los. –

+0

Hola Marc, parece una buena idea, pero ¿de qué método del objeto de excepción puedo obtener este código? Sólo parece que esté recibiendo la excepción MySql.Data y el mensaje de la BD sin el código de error – Stainedart

Respuesta

6

Como Marc B señalado que cada error de MySQL tiene un código de error, por lo que se puede coger un MySqlException usando un bloque try ... catch así:

try 
{ 

} 
catch (MySqlException ex) 
{ 
    int errorcode = ex.Number; 
} 

Para que pueda escribir una declaración de caso para proporcionar el mensaje de error para cada código de error, aquí hay una lista de server error codes and messages.

+0

Sí que pensé que mi principal problema era que estaba alcanzando excepción y no la MySqlException específica, así que no tengo acceso al atributo Número. Muchas gracias. – Stainedart

+0

En realidad gracias a @Mark B. –

1

Usted podría tratar de controlar el mensaje de error SQL específica y mostrarlo

Try 

Catch ex as SqlException 
'''sql specific error message 
''ie: 
response.write("oops! error message: " & ex.message) 
Catch ex as Exception 
'''any other runtime error messages 
End Try 
+0

Hola Carlos, esto es lo que estoy haciendo actualmente, pero una copia de la llave en la inserción no es un mensaje fácilmente comprensible por todos, Estoy tratando de basan en las que un mensaje de error fácil de usar como "el valor introducido ya está presente en el sistema" – Stainedart

+0

Desafortunadamente, no hay manera de traducir los mensajes de error en la redacción de su promedio de Joe va a entender. Lo que he hecho en el pasado es usar un archivo de recursos y poner en una columna el mensaje de excepción .NET y luego en la segunda columna, la traducción del usuario final. Muy tierno, pero para ese proyecto tenía un requisito de que el error tenía que ser fácil de entender por el usuario. Las excepciones están realmente diseñadas para que los programadores las manejen de forma programática (se traducen en un mensaje fácil de usar, registran el error, etc.) para manejar los errores con mayor gracia. – Losbear

Cuestiones relacionadas