SQL Server Raiserror не вызывает исключение в клиенте .NET - PullRequest
5 голосов
/ 18 июня 2009

У меня есть хранимая процедура в базе данных SQL Server 2005, в которой есть такой оператор:

  IF @Condition = 0
    BEGIN
        RAISERROR('some error message',16,1)
        RETURN
    END

и вызывается из клиента C # примерно так:

 try
           {
                SomeVariable = SqlHelper.ExecuteScalar(GetConnectionString(), "MySP", new object[] { param1, param2});
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
            }

Однако не исключение. Условие в SP всегда верно для тестирования. Чтобы проверить это, я скопировал вызов из SQL Server Profiler и выполнил его в окне запроса, и было напечатано сообщение ErrorMessage, что означает возникновение ошибки.

Не уверен, что происходит.

Ответы [ 4 ]

6 голосов
/ 18 июня 2009

Я прошел через класс SQL Helper и обнаружил, что ExecuteScalar ест исключение и возвращает ноль. Я переключился на ExecuteDataSet, который не делает этого. Я ожидал, что другой метод Execute .. будет вести себя одинаково. Другой способ - использовать ExecuteScalar, и, когда SP обнаруживает ошибку, он ВЫБИРАЕТ некоторый номер ошибки, который может быть обработан в клиенте.

2 голосов
/ 18 июня 2009

По данным SQL Books, уровень серьезности - 16 «Обозначает общие ошибки, которые могут быть исправлены пользователем». - так что серьезность в порядке.

У меня есть только SQL 2008 для работы, но я протестировал RAISERROR («некоторые сообщения об ошибках», 16,1), и ошибка была обнаружена в моем приложении c #. Вы уверены, что ошибка не обрабатывается в вашем классе "SqlHelper"?

1 голос
/ 05 октября 2009

Из книг онлайн

Укажите уровень серьезности 10 или ниже, чтобы использовать RAISERROR для возврата сообщения из блока TRY без вызова блока CATCH.

0 голосов
/ 18 июня 2009

Это как-то связано с уровнем серьезности? Если у вас уровень серьезности до 19, повышается ли это до вашего кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...