Если вы поймаете SqlException, вы сможете перечислить коллекцию «Ошибки», содержащую несколько объектов «SqlError».
SqlError имеет среди прочего такие свойства, как "Class" и "Number" - нарушения уникального ключа: class = 14 и number = 2601. Проверьте эти числа, чтобы точно найти вашу ошибку.
Это те же коды ошибок, которые вы получаете при попытке выполнить запрос в SQL Management Studio:
Сообщение 2601, Уровень 14, Состояние 1, Строка 1
Невозможно вставить дубликат ключевой строки в
объект ..........
Заявление было прекращено.
«Msg» преобразуется в свойство «Number» в SqlError, а «Level» - в «Class».
try
{
_cmd.ExecuteNonQuery();
}
catch(SqlException sqlExc)
{
foreach (SqlError error in sqlExc.Errors)
{
string msg = string.Format("{0}: {1}", error.Number, error.Message);
}
}
Таким образом, вы можете легко и ТОЧНО идентифицировать ошибку «уникальное ограничение нарушено».
Марк