我想从ado.net中的数据库产品名称进行搜索。当用户输入产品的全名时,它会得到结果,但我希望当用户输入第一个字母时,文本更改事件调用并根据第一个字母获得结果.eg如果用户只输入'e',它会根据e得到所有结果并在datagridview中显示
private void textBox10_TextChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["hamad"].ConnectionString);
conn.Open();
DataSet dtt = new DataSet();
SqlCommand cmd = new SqlCommand("SELECT * from product where pname = '" + textBox10.Text.ToString() + "'", conn);
SqlDataAdapter daa = new SqlDataAdapter();
daa.SelectCommand = cmd;
daa.Fill(dtt, "product");
dataGridView2.DataSource = dtt;
dataGridView2.DataMember = "product";
dataGridView2.Visible = true;
}
请帮助我。我想很多
答案 0 :(得分:2)
首先,即使我的答案的假设不正确,永远不会附加用户提供给SQL语句的文本。那就是要求SQL Injection个问题
我猜你需要使用用户在文本框中输入的文字开始的所有结果。
您要求数据库中的任何条目完全已在数据库中输入的内容,因此当用户查找时,让我们说书籍,他将需要输入完整的标题这本书,或者它不会被退回。这不是一个搜索:)
为此,您需要使用like
sql operator,使用=
。尝试更改行:
SqlCommand cmd = new SqlCommand("SELECT * from product where pname = '" + textBox10.Text.ToString() + "'", conn);
带
SqlCommand cmd = new SqlCommand("SELECT * from product where pname like @pname+'%'", conn);
cmd.Parameters.AddWithValues("@pname", textBox10.Text);
这应该(安全地)返回名称以输入的字符串开头的任何产品。
答案 1 :(得分:0)
试试这个
private void textBox10_TextChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["hamad"].ConnectionString);
conn.Open();
DataSet dtt = new DataSet();
SqlCommand cmd = new SqlCommand("SELECT * from product where pname like @pname+'%'", conn);
cmd.Parameters.AddWithValues("@pname", textBox10.Text);
SqlDataAdapter daa = new SqlDataAdapter();
daa.SelectCommand = cmd;
daa.Fill(dtt, "product");
dataGridView2.DataSource = dtt;
dataGridView2.DataMember = "product";
dataGridView2.Visible = true;
}
这将显示以您键入的字符开头的所有记录。 注意强>;如果按Tab键,按回车键或单击文本框外的内容,将完成所有这些操作。