【发布时间】:2016-12-06 17:20:00
【问题描述】:
我接下来要做的是根据输入的任何值过滤下拉框。例如。如果一个词是"16 cat123",通常用户必须首先输入数字"16" 或数字"1" 才能显示结果。如果用户应该从输入"cat123" 开始,那么我希望它仍然会显示原始项目"16 cat123",而不是这个。我怎样才能做到这一点?我知道它是LIKE 子句与我的SELECT 的组合,但目前它仍然以相同的方式运行,即仅通过输入的第一个字母发回值。这是我当前的查询:
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());
}
}
【问题讨论】:
-
您的逻辑在这里似乎是正确的,
LIKE '%value%'是进行“包含”搜索的正确语法,您可能需要组合一个更完整的示例来说明问题。 -
参数化你的查询,否则一个聪明的输入(SQL注入)可能会破坏你的数据库。
-
我通过使用来自here 的该用户的指南找到了解决方法作者所做的是覆盖winforms 中的默认组合框设置。我刚刚找到了一种将它绑定到我的代码中并让它运行起来的方法。希望这对将来的某人有所帮助。