Могут ли блоки Try-Catch SQL обрабатывать сгенерированные ошибки CLR? - PullRequest
3 голосов
/ 23 сентября 2008

Мы используем SQL 2005 и функциональность try-catch для обработки всей нашей обработки ошибок в БД. В настоящее время мы работаем над развертыванием функции .NET CLR для выполнения некоторых вызовов WCF в БД. Эта процедура WCF записывается в CLR, а затем развертывается в SQL. Если я помещаю блок try-catch в код CLR, он отлично ловит ошибку. Однако я не могу выбросить ошибку до блока try-catch в SQL. SQL, кажется, игнорирует то, что я выбрасываю, и ловит найденную ошибку. Разве нет никакой связи между ними (то есть я не могу бросить одного на другого?)

Если я могу бросить из CLR в вызывающую процедуру в SQL, нужно ли какое-либо специальное форматирование? Я попытался в конкретном случае перехватить выданную ошибку и затем выдать другую ошибку, но SQL проигнорировал мою выданную ошибку и уловил исходную ошибку, как если бы он проигнорировал выданную ошибку.

1 Ответ

2 голосов
/ 23 сентября 2008

Вот блог, который освещает это на высоком уровне: Обработка исключений в SQLCLR

Когда SQL-сервер выполняет пользовательскую функцию / процедуру / триггер, реализованный в CLR (т.е. управляемый код), мы устанавливаем обработчик управляемых исключений вокруг пользовательского кода. Поэтому, если в пользовательском коде произошла утечка исключения, сервер его перехватит и выдаст исключение TSQL, охватывающее исключение пользователя.

Кажется, это означает, что это будет просто работать.

...