Просто добавьте к тому, что предложил @ Gary.Ray: если в вашей таблице есть несколько ключей-кандидатов («Если поле не является вашим первичным ключом ...»), то сообщение об ошибке, бесполезно возвращаемое ACE / Jet, не скажу, какой ключ был нарушен:
Изменения, которые вы запросили в таблице
не были успешными, потому что они будут
создать повторяющиеся значения в индексе,
первичный ключ или отношения. + Изменить
данные в поле или поля, которые
содержат дубликаты данных, удалите
индекс или переопределить индекс, чтобы разрешить
дублируйте записи и попробуйте снова.
К счастью, существует более одного способа реализации ключа, и использование ограничения CHECK
имеет преимущество, заключающееся в возврате имени ограничения в сообщении об ошибке. Например, это ограничение CHECK
будет дублировать столбец MyField:
ALTER TABLE MyTable ADD
CONSTRAINT MyTable__MyField__no_dups_allowed
CHECK (NOT EXISTS (
SELECT T1.MyField
FROM MyTable AS T1
GROUP
BY T1.MyField
HAVING COUNT(*) > 1
));
Для данных, которые не соответствуют «MyField», но удовлетворяют другим ключам в таблице, сообщение об ошибке будет:
Одно или несколько значений запрещены
правило проверки
'MyTable__MyField__no_dups_allowed
установить для «MyTable
». Введите значение, которое
выражение для этого поля может
принимаем.
Затем вы можете перехватить ошибку в своем интерфейсе C # и проанализировать сообщение об ошибке для известных имен ограничений, чтобы получить более значимое сообщение.