2011-01-28 8 views
9

Duplicar posibles:
Obtain the Query/CommandText that caused a SQLException¿Cómo puedo obtener el SQL real que causó una SqlException en C#?

estoy trabajando en un código de control de errores (utilizando ELMAH) y la configuración por defecto sólo se envía el mensaje de error. Me gustaría saber el SQL real que emite un error (es decir, "SELECT * FROM thisTableDoesNotExist")

Esto es lo que tengo hasta ahora:

if (e.Error.Exception is SqlException) 
{ 
    //if SQL exception try to give some extra information 
    SqlException sqlEx = e.Error.Exception as SqlException; 
    e.Mail.Body = e.Mail.Body + "<div>" + 
           "<h1>SQL EXCEPTION</h1>" + 
           "<b>Message</b>: " + sqlEx.Message + 
           "<br/><b>LineNumber:</b> " + sqlEx.LineNumber + 
           "<br/><b>Source:</b> " + sqlEx.Source + 
           "<br/><b>Procedure:</b> " + sqlEx.Procedure + 
           "</div>"; 
} 

Y me gustaría ser capaz de mostrar también el SQL real La base de datos es SQL Server 2008 y SqlException es del tipo System.Data.SqlClient.SqlException.

Respuesta

5

No es posible. Deberá detectar la excepción donde se ejecutó el comando SQL y luego incluir su texto de comando en su propia excepción personalizada. Ver Obtain the Query/CommandText that caused a SQLException.

+0

, también podría incluir el código en la respuesta a la que se hace referencia –

+1

¿No es esto un duplicado de esa pregunta, entonces? –

1

La mejor manera de examinar la excepción es colocar un punto de interrupción en el código donde ocurre la excepción y examinar los valores del gráfico del objeto de excepción.

Prueba el miembro de mensaje de la InnerException así:

sqlEx.InnerException.Message 

Se puede no proporcionar el SQL exacta que fracasó, pero le puede dar una información más específica, como la operación y el nombre de tabla. El miembro de StackTrace también puede tener cierta información.

1

Puede tener código de manejo de errores en su SQL, y cuando encuentra un error, puede devolver el SQL que intentó ejecutar con una declaración de impresión o devoluciones o como quiera devolverlo a su aplicación.

+0

La mejor solución al problema. Las otras respuestas son ciertas, pero esta es una solución alternativa legítima (no hacky). – Crisfole

0

Si no puede obtener suficiente información en el lado C#, puede usar "Analizador de SQL" (parte de MS SQL completo) para ver qué comandos se ejecutaron.

Información sobre el Analizador de SQL http://msdn.microsoft.com/en-us/library/ms181091.aspx. También debería poder utilizar la API de seguimiento subyacente si no tiene Profiler - http://msdn.microsoft.com/en-us/library/ms191006.aspx

+0

SQLExceptions puede ser lanzado por otros proveedores de datos además de MS-SQL. –

Cuestiones relacionadas