2011-02-10 10 views
8

Uso C# e Sql Server 2008 e ho alcuni blocchi try/catch nella mia stored procedure CLR e questi vengono rilevati. Questi sono registrati in un file e restituiscono un errore di codice e un messaggio usando SqlPipe. Queste multe funzionano. Ora ho bisogno di fare lo stesso quando ho degli errori non tracciati soprattutto per avere una traccia nel file di log!Global exception handler in CLR Stored procedure

Ho provato a utilizzare Application.ThreadException ma questa classe non è disponibile in CLR Stored Procedure (WinForms). Devo utilizzare un blocco try/catch malevolo nel mio metodo di procedura Sql entry o c'è qualcosa di meglio da fare?

Grazie.

+1

SQL Server non consente di specificare il proprio gestore per le eccezioni non gestite * *. Se non viene gestita un'eccezione, SQL Server invia un messaggio di errore all'utente. –

risposta

1

Come ricordo, SQL Server eseguirà il dump delle eccezioni non gestite sul proprio file di registro, oltre a restituirle all'utente. Potresti volerlo esaminare.

1

L'approccio più pulito sarà utilizzare un blocco try..catch nel metodo CLR richiamato. Ancora meglio sarebbe quello di mantenere la funzionalità principale di un metodo separato che viene richiamato dal metodo di immissione 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 
}