LIKE子句没有像预期的那样返回值

问题描述:

接下来我想根据输入的任何值过滤下拉框。如果一个单词是说"16 cat123"通常用户将不得不开始输入数字"16"或数字"1"为它显示结果。相反,如果用户应该通过输入"cat123"开始,那么它仍会显示原始项目"16 cat123"。我怎样才能做到这一点?我知道这是LIKE条款与我的SELECT的组合,但目前它仍以相同的方式运行,只是通过输入的第一个字母发回值。这是我当前的查询:LIKE子句没有像预期的那样返回值

string query = "SELECT * FROM dbo.Carimed WHERE Item_Description LIKE '%" + comboBox3.Text.Replace("'", "''") + "%'; "; 

我在想什么?

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     try 
     { 

      string connectionString = "Data Source=CMDLAP126;Initial Catalog=Carimed_Inventory;User ID = sa; Password = 123456;"; 
      string query = " "SELECT * FROM dbo.Carimed WHERE Item_Description LIKE '%" + comboBox3.Text.Replace("'", "''") + "%' "; 
      SqlConnection con = new SqlConnection(connectionString); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(query, con); 
      SqlDataReader dr = cmd.ExecuteReader(); 

      while (dr.Read()) 
      { 
       string cari_code = dr.GetString(dr.GetOrdinal("item#")); 
       textBox2.Text = cari_code; 

      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.ToString()); 
     } 

    } 
+0

您的逻辑在这里看起来是正确的,''LIKE'%value%''是做“包含”搜索的正确语法,您可能希望将更完整的示例放在一起以显示问题。 – Guvante

+5

参数化你的查询,或者一个聪明的输入(SQL注入)可能会破坏你的数据库。 –

+0

我从[这里](https://www.codeproject.com/tips/631196/combobox-with-suggest-ability-based-on-substring-s)使用该用户的指南找到了解决办法。 什么由作者完成是覆盖默认的组合框设置在WinForms中。我只是找到了一种将其绑定到我的代码并启动并运行的方法。希望这有助于未来的某个人。 – Jevon

试试这个:

全功能更新

string query = "SELECT * FROM dbo.Carimed WHERE Item_Description LIKE '" + comboBox3.Text.Replace("'", "''") + "%'; "; 

string query = "SELECT * FROM dbo.Carimed WHERE Item_Description LIKE '%" + comboBox3.Text.Replace("'", "''") + "%' "; 

也许分号去掉那是你的查询字符串的一部分?

+0

这是我在调试时尝试的。同样的问题。感谢所有相同的建议 – Jevon

+0

一切看起来都正确。检查comboBox2.Text的值是你期望的没有额外的字符。 –

除了查询中额外的;,它看起来是正确的。如果适用于您的应用程序,您可能需要修剪内容(comboBox3.Text.Trim()),以便"cat123 "匹配"16 cat123"。正如评论中所建议的那样,您应该参数化您的查询。

+0

已经从数据库端修改了它,所以没有问题,并且知道它应该被参数化,仅用于临时练习 – Jevon

+0

您的意思是数据库中的数据是否被修剪?或者用户输入被修剪?例如,如果我输入“cat123”,你的查询最终将执行SELECT ... FROM .. WHERE Item_Description LIKE'%cat123%'? –

+0

是的,但如果我没有,我尝试了你的建议,仍然没有运气 – Jevon