请帮忙,
ASPX Form背后的VB.Net代码。我有一个具有PartSN和Model字段的SQL表。 PartSN可以在表中存储两个条目。我想要做的是让代码在textbox1中输入时选择PartSN,并且只有当PartSN与下拉列表文本匹配时才更新为True。
我在此处的更新代码中收到错误: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 :(得分:0)
你在SELECT语句的WHERE子句中有向后的部分,你这样做:
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注入攻击,因为WHERE子句使用文本框的
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更改为数据库中的长度。
更新:
您使用AND
语句的WHERE
子句中的SELECT
条件的错误语法。
你正在做与此相同的事情:
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
列进行比较。