关于ado.net的搜索

时间:2012-12-22 21:44:33

标签: .net

我想从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;
    }

请帮助我。我想很多

2 个答案:

答案 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)

  1. 当用户按Tab键时,会调用textChange事件,按回车键或单击文本框外的内容。
  2. 如果要从字符串的一部分进行搜索,则必须在sql查询中使用。
  3. 试试这个

      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键,按回车键或单击文本框外的内容,将完成所有这些操作。