2011-02-10 6 views
8

Uso C# y Sql Server 2008 y tengo algunos bloques try/catch en mi CLR Stored Procedure y estos son capturados. Estos se registran en un archivo y devuelven un mensaje de error y un mensaje usando SqlPipe. Estas multas de trabajo. Ahora tengo que hacer lo mismo cuando tengo algunos errores no capturados, ¡especialmente para tener un rastro en el archivo de registro!Controlador global de excepciones en CLR Procedimiento almacenado

Intenté utilizar Application.ThreadException pero esta clase no está disponible en el Procedimiento almacenado de CLR (WinForms). ¿Tengo que usar un bloque de prueba/captura en mi método de entrada Sql Procedure o hay algo mejor que hacer?

Gracias.

+1

SQL Server no permite especificar su propio manejador de excepciones no controladas * *. Si no se maneja una excepción, SQL Server envía un mensaje de error al usuario. –

Respuesta

1

Como recuerdo, SQL Server volcará las excepciones no controladas a su propio archivo de registro, además de devolverlas al usuario. Puede que quieras averiguar eso.

1

El enfoque más limpio será usar un bloque try..catch en el método CLR invocado. Aún mejor sería mantener la funcionalidad principal de un método separado que se invoca por el método de introducción de CLR:

[SqlProcedure] 
public static void GetSomething(string value) 
{ 
    try { 
     DoGetSomething(value): 
    } 
    catch (Exception ex) { 
     // error handling 
    } 
} 

private static void DoGetSomething(string value) 
{ 
    // implementation goes here 
} 
Cuestiones relacionadas