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());
}
}
试试这个:
全功能更新
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("'", "''") + "%' ";
也许分号去掉那是你的查询字符串的一部分?
这是我在调试时尝试的。同样的问题。感谢所有相同的建议 – Jevon
一切看起来都正确。检查comboBox2.Text的值是你期望的没有额外的字符。 –
除了查询中额外的;
,它看起来是正确的。如果适用于您的应用程序,您可能需要修剪内容(comboBox3.Text.Trim()
),以便"cat123 "
匹配"16 cat123"
。正如评论中所建议的那样,您应该参数化您的查询。
您的逻辑在这里看起来是正确的,''LIKE'%value%''是做“包含”搜索的正确语法,您可能希望将更完整的示例放在一起以显示问题。 – Guvante
参数化你的查询,或者一个聪明的输入(SQL注入)可能会破坏你的数据库。 –
我从[这里](https://www.codeproject.com/tips/631196/combobox-with-suggest-ability-based-on-substring-s)使用该用户的指南找到了解决办法。 什么由作者完成是覆盖默认的组合框设置在WinForms中。我只是找到了一种将其绑定到我的代码并启动并运行的方法。希望这有助于未来的某个人。 – Jevon