Нет дублирующегося первичного ключа

#c# #sql #primary-key

#c# #sql #первичный ключ

Вопрос:

Я работаю над школьным заданием. Это мой образец формы:

образец формы http://i53.tinypic.com/14xlrl.png

Что я пытаюсь сделать, так это то, что когда пользователь добавляет запись, имеющую тот же идентификатор курса (первичный ключ), что и одна из перечисленных записей, должно появиться окно с сообщением, в котором говорится: «Невозможно вставить тот же идентификатор курса или невозможно дублировать идентификатор курса (поскольку ПЕРВИЧНЫЙ КЛЮЧ не может быть ПРОДУБЛИРОВАН)».

Комментарии:

1. Многие из нас знают ответ, но что вы пробовали?

2. Мне неприятно это говорить, но я знаю, какие две вещи не были опробованы: изучение ограничений первичного ключа и проверка ошибок…

3. И что в настоящее время происходит в вашем приложении, когда вы пытаетесь это сделать? Сбой? Вставляется ли запись, даже если это обман? Пожалуйста, отредактируйте свой вопрос, чтобы добавить эту информацию (и Джона — я также согласен с его вопросом).

4. У @albanx Merlyn нет возможности удалить ваш комментарий. Он был удален системой после привлечения нескольких флагов. Единственное неуважение здесь ваше.

5. да, да, да, это все, что говорит система

Ответ №1:

Я полагаю, что вы вручную вставляете идентификатор курса. Лучший способ — сделать столбец CourseID автоматически увеличивающимся в SQL Server.

Во-вторых, если вы серьезно создали первичный ключ, он не будет принимать дубликаты. Вам нужно только перехватить исключение. Проверьте эти ссылки на обработку исключений:

Выбрасывание исключений в C#

Исключения и обработка исключений (Руководство по программированию на C #)

Ответ №2:

Ваш Course_ID столбец выглядит избыточным. Предложение: отбросьте Course_ID и объявите уникальное ограничение на Course_Code использование значимого имени. Когда обновление приведет к дублированию Course_ID значения, СУБД автоматически отклонит обновление и сгенерирует ошибку. Вы должны убедиться, что эта ошибка доступна вашему приложению, включая значимое имя, чтобы ваше приложение могло корректно обрабатывать.

Ответ №3:

Как говорили другие, не позволяйте пользователю вводить первичный ключ. Однако, если вам действительно нужно.

 Select Count(*) from tablename where CourseID = [whatever]
  

Если Count возвращает 1, то это означает, что уже есть запись с этим идентификатором, и выдает ошибку.

Альтернативой является просто попробовать функцию Insert, которая должна выдать исключение, а затем обработать это.