#c# #sql #primary-key
#c# #sql #первичный ключ
Вопрос:
Я работаю над школьным заданием. Это мой образец формы:
образец формы http://i53.tinypic.com/14xlrl.png
Что я пытаюсь сделать, так это то, что когда пользователь добавляет запись, имеющую тот же идентификатор курса (первичный ключ), что и одна из перечисленных записей, должно появиться окно с сообщением, в котором говорится: «Невозможно вставить тот же идентификатор курса или невозможно дублировать идентификатор курса (поскольку ПЕРВИЧНЫЙ КЛЮЧ не может быть ПРОДУБЛИРОВАН)».
Комментарии:
1. Многие из нас знают ответ, но что вы пробовали?
2. Мне неприятно это говорить, но я знаю, какие две вещи не были опробованы: изучение ограничений первичного ключа и проверка ошибок…
3. И что в настоящее время происходит в вашем приложении, когда вы пытаетесь это сделать? Сбой? Вставляется ли запись, даже если это обман? Пожалуйста, отредактируйте свой вопрос, чтобы добавить эту информацию (и Джона — я также согласен с его вопросом).
4. У @albanx Merlyn нет возможности удалить ваш комментарий. Он был удален системой после привлечения нескольких флагов. Единственное неуважение здесь ваше.
5. да, да, да, это все, что говорит система
Ответ №1:
Я полагаю, что вы вручную вставляете идентификатор курса. Лучший способ — сделать столбец CourseID автоматически увеличивающимся в SQL Server.
Во-вторых, если вы серьезно создали первичный ключ, он не будет принимать дубликаты. Вам нужно только перехватить исключение. Проверьте эти ссылки на обработку исключений:
Исключения и обработка исключений (Руководство по программированию на C #)
Ответ №2:
Ваш Course_ID
столбец выглядит избыточным. Предложение: отбросьте Course_ID
и объявите уникальное ограничение на Course_Code
использование значимого имени. Когда обновление приведет к дублированию Course_ID
значения, СУБД автоматически отклонит обновление и сгенерирует ошибку. Вы должны убедиться, что эта ошибка доступна вашему приложению, включая значимое имя, чтобы ваше приложение могло корректно обрабатывать.
Ответ №3:
Как говорили другие, не позволяйте пользователю вводить первичный ключ. Однако, если вам действительно нужно.
Select Count(*) from tablename where CourseID = [whatever]
Если Count возвращает 1, то это означает, что уже есть запись с этим идентификатором, и выдает ошибку.
Альтернативой является просто попробовать функцию Insert, которая должна выдать исключение, а затем обработать это.