2013-11-27 2 views
1

Пожалуйста, помогите,Использование текстового поля и DropdownList для обновления данных в базе данных SQL

Код VB.Net за формой ASPX. У меня есть таблица SQL, в которой есть поле PartSN и Model. PartSN может иметь две записи, хранящиеся в таблице. Я хочу сделать, чтобы код выбирал PartSN при вводе в текстовое поле 1 и обновлялся только с помощью True, когда PartSN соответствует тексту dropdownlist.

Я получаю сообщение об ошибке в коде обновления здесь: where "('" &** TextBox1.Text & "' =PartSN") , ('" & Dropdownlist1.Text & "' =Model")"

cmd.CommandText = "SELECT PartSN FROM Table_Data WHERE '" _ 
    & TextBox1.Text & "' =(PartSN)" 

cmd.CommandText = "Update Table_Data SET TestComplete = @TestComplete where "('" _ 
    & TextBox1.Text & "' =PartSN") , ('" & Dropdownlist1.Text & "' =Model")" 

cmd.CommandType = CommandType.Text 

With cmd.Parameters 
    .AddWithValue("@TestComplete", "True") 
+0

вы можете сказать нам, что такое ошибка, или нам нужно угадать? – Plutonix

+0

«(« Говорят, что выражение ожидалось ». – user3042017

+0

Извините, что я хочу сказать:« («Говорит, что выражение ожидалось. Спасибо!» – user3042017

ответ

0

У вас есть кусочки назад в ИНЕКЕ, вы делаете это ваш ЗЕЬЕСТ'S:

SELECT PartSN FROM Table_data 
WHERE 'ABC' = (PartSN) 

Это не действительный SQL, вам нужно указать имя поля левой стороны равного выражения, например:

SELECT PartSN FROM Table_data 
WHERE PartSN = 'ABC' 

Теперь ваш код должен выглядеть следующим образом:

cmd.CommandText = "SELECT PartSN FROM Table_Data WHERE PartSN = '" _ 
    & TextBox1.Text & "'" 

Примечание: Ваш код будет уязвим для атак SQL Injection, потому что ИНЕКЕ использует непроверенные значения из Text свойство текстового поля. Другими словами, пользователь может вводить команды вредоносных баз данных в текстовое поле вашей страницы, и он будет выполнен против базы данных, такой как ';DROP TABLE users;-- или что-то в этом роде.

Использование параметризованных SQL, например:

cmd.CommandText = "SELECT PartSN FROM Table_Data WHERE PartSN = @PartSN" 
cmd.Parameters.Add("@PartSN", SqlDbTypes.VarChar, 50).Value = TextBox1.Text 

Примечание: Вам нужно будет изменить длину вашего @PartSN поля от 50 до любой длины в базе данных.

UPDATE:

Вы используете неправильный синтаксис для AND ИНГ вместе критериев в пункте вашего SELECT заявления WHERE.

Вы делаете эквивалент этого:

SELECT PartSN FROM Table_data 
WHERE (PartSN = 'ABC'), (Model = 'ABC') 

Булева логика WHERE положений использует синтаксис AND или OR, как это:

SELECT PartSN FROM Table_data 
WHERE PartSN = 'ABC' AND Model = 'ABC' 

Таким образом, чтобы использовать параметризированное решение SQL из выше, сделайте это:

cmd.CommandText = "SELECT PartSN FROM Table_Data WHERE PartSN = @PartSN AND Model = @PartSN" 
cmd.Parameters.Add("@PartSN", SqlDbTypes.VarChar, 50).Value = TextBox1.Text 

Примечание. Возможно, вы захотите изменить параметр на лучшее имя, чем @PartSN, поскольку оно используется для сравнения с столбцом PartSN и Model.

+0

Спасибо. Я внес изменения. Я все еще получаю сообщение об ошибке Expression Ожидается, "в выражении: cmd.CommandText =" Update Table_Data SET TestComplete = @TestComplete где "('" _& TextBox1.Text & "' = PartSN"), ('"& Dropdownlist1.Text &"' = Model ") " – user3042017

+0

@ user3042017 -' PartSN' и 'Model' - это имена столбцов, они должны быть в левой части знака равенства, например:' 'SELECT PartSN FROM Table_Data WHERE PartSN = '" _ & TextBox1 .Text & "'" '. Кроме того, запятая (', ') - это не то, как вы сравниваете критерии AND в предложении WHERE. Это должно быть:' "SELECT PartSN FROM Table_Data WHERE PartSN ='" _ & TextBox1. Текст & "'" AND Model =' "_ & TextBox1.Text & "'" '. См. Обновленный ответ. –

+0

Больше ошибок! Спасибо за помощь! – user3042017

Смежные вопросы