SELECT语句不返回预期结果

时间:2016-09-30 07:27:43

标签: c# asp.net

你好Stackoverflow的好人。

我的Sql存在问题,因为我是新手,我很确定它是语法问题还是错误/误解逻辑。

这是相关的想法:

<asp:DropDownList ID="DropDownList_Brand" runat="server">
  <asp:ListItem>Brændeovn</asp:ListItem>
  <asp:ListItem>Brændespande</asp:ListItem>
  <asp:ListItem>Pejsesæt</asp:ListItem>
  <asp:ListItem>Optænding</asp:ListItem>
  <asp:ListItem>Vedligeholdelse</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="TextBox_Sog_Adv" runat="server"></asp:TextBox>
<asp:Button ID="Button_Sog_Adv" runat="server" Text="SØG" OnClick="Button_Sog_Click_Adv" />

这是后端:

protected void Button_Sog_Click_Adv(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    var Pr_Navn = TextBox_Sog_Adv.Text;
    var Pr_Type = DropDownList_Brand.Text;
    cmd.CommandText = "SELECT * FROM Table_Products WHERE products_name LIKE '%" + Pr_Navn + "%' OR products_brand LIKE '%" + Pr_Navn + "%' AND products_type='" + Pr_Type + "'";


    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    Repeater_Sog_Adv.DataSource = dt;
    Repeater_Sog_Adv.DataBind();
}

现在我很确定它的问题就在于问题,我会相信AND就像OR一样,但它必须是真的。 (可能是错的)

然而,这里的主要焦点是这一行:

cmd.CommandText = "SELECT * FROM Table_Products WHERE products_name LIKE '%" + Pr_Navn + "%' OR products_brand LIKE '%" + Pr_Navn + "%' AND products_type='" + Pr_Type + "'";

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

你可能会错过一些括号

WHERE (products_name LIKE '%" + Pr_Navn + "%' OR products_brand LIKE '%" + Pr_Navn + "%') AND products_type='" + Pr_Type + "'";

您可以查看sql(sql server here)中的运算符优先级,以了解如何处理混合OR / AND,并立即忘记它,以便记住您应该使用括号。

现在,您应该注意sql注入,并使用parameterized queries