-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インジェクションの問題を求めています


ユーザーがテキスト ボックスに入力したテキストで始まるすべての結果が必要だと思います。

がデータベースに入力したものとまったく同じエントリをデータベースに要求しているため、ユーザーが本を探すとき、本の完全なタイトルを入力する必要があります。そうしないと、返されません。それはあまり検索ではありません:)

そのためには、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. textChange イベントは、ユーザーがタブを押すか、Enter キーを押すか、テキスト ボックスの外側の何かをクリックすると呼び出されます。
  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;
  }

これにより、入力した文字で始まるすべてのレコードが表示されます。 ; タブを押すか、Enter キーを押すか、テキストボックスの外側の何かをクリックすると、これがすべて実行されます。

于 2012-12-22T22:13:46.873 に答える