-1

我想从 ado.net 中的数据库产品名称中搜索。当用户输入产品的全名时,它会得到结果,但我希望当用户输入第一个字母时,文本更改事件调用并根据第一个字母获取结果。例如,如果用户只输入'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;
    }

请帮帮我。我想了很多

4

2 回答 2

2

首先,即使我的答案的假设不正确也是有效的,永远不会将用户提供的文本附加到 SQL 语句中。那是要求SQL 注入问题


我猜您需要以用户在文本框中输入的文本开头的所有结果。

您正在向数据库询问与数据库中输入的内容完全相同的任何条目,因此当用户查找书籍时,他将需要输入书籍的完整标题,否则将不会返回。这不是一个搜索:)

为此,您需要使用likesql 运算符,而不是使用=. 尝试换行:

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);

这应该(安全地)返回名称以输入的字符串开头的任何产品。

于 2012-12-22T22:10:02.657 回答
0
  1. 当用户按 Tab、按 Enter 或单击文本框外的内容时调用 textChange 事件。
  2. 如果要从字符串的一部分进行搜索,则必须在 sql 查询中使用 like。

尝试这个

  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、按 Enter 或单击文本框外的内容,所有这些都将完成。

于 2012-12-22T22:13:46.873 回答