Глобальный обработчик исключений в хранимой процедуре CLR - PullRequest
8 голосов
/ 10 февраля 2011

Я использую C # и Sql Server 2008, и у меня есть несколько блоков try / catch в моей хранимой процедуре CLR, и они перехвачены. Они регистрируются в файле и возвращают код ошибки и сообщение, используя SqlPipe. Эти штрафы работают. Теперь мне нужно сделать то же самое, когда у меня есть несколько ошибок, особенно для отслеживания в файле журнала!

Я пытался использовать Application.ThreadException, но этот класс недоступен в хранимой процедуре CLR (WinForms). Должен ли я использовать непослушный блок try / catch в методе Sql для записи entry или есть что-то лучше?

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Самым чистым подходом будет использование блока try..catch в вызываемом методе CLR.Еще лучше было бы сохранить основные функциональные возможности в отдельном методе, который вызывается методом записи 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
}
1 голос
/ 10 февраля 2011

Насколько я помню, SQL Server будет выгружать необработанные исключения в свой собственный файл журнала, а также возвращать их пользователю.Возможно, вы захотите разобраться в этом.

...