从带有多运算符的sql中选择

时间:2018-07-02 12:25:31

标签: sql vb.net

我有一个代码可以从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查询中选择的存储

查询到底出了什么问题? 我希望能找到帮助

2 个答案:

答案 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>