Я только что выбрал проект, по которому кто-то пошел по этому маршруту:
Catch ex As SqlException
Select Case ex.Number
Case 2601
...
Обратите внимание на следующее (из sys.messages в SQL Server):
2601 - Невозможно вставитьповторяющаяся строка ключа в объекте "%. * ls" с уникальным индексом "%. * ls".
Но как насчет этого??
2627 - Нарушение ограничения% ls '%.* LS'.Невозможно вставить дубликат ключа в объект "%. * Ls". "
Я просто потратил некоторое время на отслеживание именно этой проблемы.
А что, если мы сменим поставщика БД? Предположительно, 2601 не совсемуниверсальный ... Это воняет, ИМО. И если вы (были) сталкивались с этим на своем уровне презентации, я думаю, что есть более серьезные вопросы.
Если это должно бытьмеханизм выбора, похороните его глубоко, глубоко в DAL и позвольте настраиваемому Исключению просачиваться. Таким образом, изменения в хранилище данных (или, в идеале, этот механизм) имеют гораздо более ограниченную область действия, и вы можете обрабатыватьпоследовательно на уровне представления без каких-либо вопросов.
В настоящее время я склоняюсь к выполнению облегченного SELECT для идентификатора открытого соединения и избегаю исключения в целом.