Member 14076249 Ответов: 2

Как предотвратить дублирование записей в моей базе данных с помощью VB.NET -что ?


Dim ds AS String = ""

ds = sqlFunction.ExecuteSQL("INSERT INTO employee.empdata (empid,fname,lname,cnumber) VALUES ('" & empid.text & "','" & fname.text & "', '" & name.text & "','" & cnumber.text & "') ",sqlFunction.connstring)


Что я уже пробовал:

Что я хочу, так это убедиться, что я не вставляю один и тот же empid в свою базу данных

ChauhanAjay

Пожалуйста, проверьте, существует ли empid в вашей таблице или нет. Если он не существует, то вставьте данные.

Member 14076249

я хочу задать запрос, который проверяет или отображает, если введенные вами данные уже находятся в базе данных

Bryian Tan

empid-это первичный ключ?

Member 14076249

Брайан, да эмпид первичен

Bryian Tan

если да, то каким образом таблица оказывается с дубликатами?

Member 14076249

он не принимает несколько записей или один и тот же empid, но я хочу отобразить его в виде сообщения в своей программе

2 Ответов

Рейтинг:
14

MadMyche

1. Если EmpID является первичным ключом, вам не будет разрешено вставлять дубликат. Это должно вызвать ошибку, отражающую нарушение ограничения.

2. операторы Insert, Update и Delete будут возвращать только целое число, отражающее количество затронутых строк. Если значение равно 0, то строка не была вставлена.

3. никогда не соединяйте строку вместе, чтобы сделать вашу команду. Вы должны использовать параметризованный оператор, чтобы избежать SQL-инъекции, которая была идентифицирована 20 лет назад и до сих пор входит в топ-5 уязвимостей веб-сайтов. Даже не вредоносная запись нарушит вашу команду; попробуйте использовать фамилию О'Рурк и посмотрите, что произойдет

Теперь несколько простых ответов на ваш вопрос
О. попробуйте выполнить команду SELECT с предложением WHERE для проверяемого EmpID
Б. использовать Stored Procedure, который может содержать оператор SELECT из (A) и вставлять только в том случае, если он не существует. Хранимая процедура также может содержать выходные параметры, которые можно передать обратно в программу для получения дополнительной информации


Рейтинг:
12

Bryian Tan

Не совсем понятно, как строится ваше приложение, но есть несколько способов сделать это,
1. Попробуйте поймать заявление, если вставить запрос, жалобу, если вставить повторяющийся ключ: пример Используя Try... Лови..., Наконец-То![^]
2. Напишите еще один оператор select, чтобы проверить, существует ли empid перед вставкой

Кроме того, код может быть уязвим для атаки SQL-инъекций/ межсайтовых сценариев. Вот пример того, как работает упомянутая уязвимость.
SQL-инъекции и межсайтовые Скрипты[^]

Попробуйте использовать параметризованные запросы, если это возможно
Использование параметризованных запросов и отчетов в VB.NET приложения для баз данных[^]