Первая ошибка возникает при попытке вставить строку, которая нарушает ограничение уникальности для таблицы.
Вторая ошибка возникает, когда строка нарушает индекс уникальности.Это небольшая разница, и, честно говоря, я действительно не знаю, почему для этого есть две разные ошибки, особенно учитывая, что в SQL Server реализовано уникальное ограничение с использованием уникального индекса.
В любом случае, я бы не сталиспользуйте сообщение об ошибке в качестве указания на то, какая у вас ошибка.Вместо этого я бы проверил номер ошибки, представленный в классе SqlException, как свойство int с именем - сюрприз-сюрприз - Число .
. Вы можете получить список всех сообщений об ошибках и их соответствующие номера.запросив sys.messages
.Я сделал это с помощью одного и того же предиката в тексте, чтобы получить соответствующие ошибки для вашего вопроса:
SELECT message_id, [Text]
FROM sys.messages
WHERE [Text] LIKE '%Cannot insert duplicate key%'
, который возвратил:
message_id Text
2601 Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'. The duplicate key value is %ls.
2627 Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'. The duplicate key value is %ls.
(И благодаря предложению Ларну о обмане, янашел ссылку для Ошибки ядра СУБД , но запрос к базе данных быстрее, чем загрузка этой страницы ...)
Итак, измените ваш код c # в блоке catch
на
// Cannot insert duplicate key..., Violation of UNIQUE KEY...
if (new int[] {2601, 2627}.Contains(sqlEx.Number))
{
....
}