我有一个代码可以从sql数据库中搜索项目
da = New SqlDataAdapter("
SELECT *
FROM ClothesBarcodeBalances
WHERE StoID='" & StorageIDtxt.Text &
"'AND ItemCode Like'%" & TextBox7.Text & "%'
OR FactoryCode Like'%" & TextBox7.Text & "%'
OR ItemName Like'%" & TextBox7.Text & "%'", dbconnect)
我需要使用Where StorageID=StorageIDtxt.text
但是在运行代码时,它会为我提供所有存储,而不是我在sql查询中选择的存储
查询到底出了什么问题? 我希望能找到帮助
答案 0 :(得分:3)
这与运算符优先级AND
运算符先解析
现在:
WHERE A and B or C or D
等效于
WHERE (A and B) or C or D
因此添加括号以获得
WHERE A and (B or C or D)
还使用参数化查询https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx
否则,您很容易受到sql注入攻击
答案 1 :(得分:1)
尝试
da = New SqlDataAdapter("
SELECT *
FROM ClothesBarcodeBalances
WHERE StoID='" & StorageIDtxt.Text &
"'AND (ItemCode Like'%" & TextBox7.Text & "%'
OR FactoryCode Like'%" & TextBox7.Text & "%'
OR ItemName Like'%" & TextBox7.Text & "%')", dbconnect)
AND
的优先级比OR
高(BTW不仅在SQL中,而且在(几乎)所有编程语言(也包括VB!)和逻辑本身中),因此它为您提供了一切匹配的商店ID或其他匹配的条件之一。
您还应该考虑使用参数化查询。您的应用程序可能会受到SQL注入攻击的攻击。</ p>