Перехват ошибок базы данных ASP.NET - PullRequest
0 голосов
/ 09 мая 2009

Мне любопытно, как люди отлавливают определенные ошибки базы данных в .NET, в частности, внешние ключи или уникальные нарушения индекса. Исходя из классического фона ASP / VB, я в первую очередь хочу проверить номер ошибки, чтобы затем создать дружественное сообщение пользователю о том, что что-то не так. Тем не менее, я думаю, что в мире .NET существуют такие вещи, как SqlForeignKeyException или аналогичные. Если такая вещь существует, я не могу найти ее нигде в документации. Как вы справляетесь с такими ошибками?

Ответы [ 2 ]

1 голос
/ 10 мая 2009

Говоря SqlException, вы должны использовать SQL Server-

Если вы хотите узнать, была ли это ошибка внешнего ключа, проверьте внутренние исключения SqlExceptions и проверьте свойство Number. Это число соответствует записи в таблице master.dbo.sysmessages, от 0 до 50000 - ошибки SQL, 50000+ - определяемые пользователем.

Не забудьте перебрать коллекцию ошибок - SQL может вернуть более одного.

Если вы используете возвращаемое значение , проверьте это также . Вам нужно будет прочитать исходный код TSQL, чтобы увидеть, использовался ли этот специальный стиль сообщений об ошибках.

Предупреждения - это ошибки уровня 10 или менее, которые должны регистрироваться с помощью события SqlInfoMessage.

Если программа возвращает ошибку @@, убедитесь, что она сохранена , поскольку ошибка @@ сбрасывается до успешного завершения при следующей последующей команде в пакете.

1 голос
/ 09 мая 2009

Если ваше приложение генерирует нарушения внешнего ключа или уникального индекса, возможно, что-то не так с приложением, и об этом должны уведомлять разработчики, а не пользователи. То есть, как правило, проверка входных данных, которые дает пользователь, должна предотвращать появление подобных исключений.

Распространенным подходом является перехват необработанных ошибок в событии Application_Error и их запись в файл или базу данных. Также есть инструменты, которые могут помочь с регистрацией ошибок, такие как ELMAH

Для пользователя подойдет только общее сообщение ... но разработчики должны следить за журналами ошибок. См. Сообщение Джеффа Этвуда о Разработка на основе исключений .

Редактировать: Чтобы ответить на другую часть вашего вопроса - в .NET существует множество различных объектов Exception, но большинство исключений SQL, похоже, представляются в виде универсального класса SqlException. Вы можете узнать больше об ошибках, изучив свойства Message и StackTrace (), а также углубившись в свойство InnerException. Что-то вроде нарушения внешнего ключа может проявляться как HttpException с вложенным в него SqlException.

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