Более тонкая гранулярность исключений SQL? - PullRequest
3 голосов
/ 04 ноября 2008

В C # Есть ли способ получить более тонкую гранулярность с исключениями SQL?

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

Также Являются ли сообщения об ошибках созданными средой или они специфичны для БД?

Например, если у меня есть нарушение первичного ключа на INSERT, будет ли сообщение об ошибке всегда:

Нарушение ограничения PRIMARY KEY 'PK_tblProduct'. Невозможно вставить дубликат ключа в объект "dbo.tblProduct".

или это специфический для SQLServer.

Обновление

Похоже, я за номером ошибки, есть идеи, где я могу получить различные номера ошибок?

лучшее, что я могу сделать с помощью быстрого Google, это: 18456: Ошибка входа 18488: срок действия пароля истек

Ответы [ 5 ]

1 голос
/ 04 ноября 2008

Член .Qumber SQLException - это то, что мне нужно, вот цифры, о которых мне удалось узнать до сих пор:

  • 17: SQL Server не существует или доступ запрещен.
  • 4060: неверная база данных
  • 18456: Ошибка входа
  • 547: нарушение ForeignKey
  • 1205: DeadLock Victim
  • 2627, 2601: уникальный индекс / постоянное нарушение
1 голос
/ 04 ноября 2008

Вы можете найти коды ошибок здесь

1 голос
/ 04 ноября 2008

Если вы перехватываете SqlException, у вас должен быть доступ к .Number, который дает вам номер ошибки SQL; это, вероятно, ваш лучший подход ... (вы можете получить то же самое из события InfoMessage и для нефатальных ошибок).

Конечно, это не будет различать таблицы - вы можете утверждать, что если вам нужен этот уровень детализации, вы должны сначала проверить (в сериализуемом уровне изоляции, в идеале с UPDLOCK), поднимая собственную ошибку, если есть конфликт данные.

0 голосов
/ 04 ноября 2008

Чтобы ответить на последнюю часть вашего вопроса: специфика сообщения об ошибке будет зависеть от базы данных. Существует несколько стандартных кодов ошибок SQL, но фактический текст изменится с СУБД на СУБД. Даже то, возвращаются ли стандартные коды ошибок SQL, зависит от СУБД.

0 голосов
/ 04 ноября 2008

В SQL Server вы можете использовать различные функции ошибок, которые возвращают различную информацию об ошибках, обнаруженных в sys.messages

Вы можете получить дополнительную информацию от BOL .

...