C#直接从文本框搜索

时间:2018-07-10 14:38:11

标签: c#

我创建了一个搜索查询,该查询将数据显示到其他文本框,但是它不允许我键入数字,并且会自动搜索..请帮助这是我的代码

这是我的代码:

private void txtBarajKod_TextChanged(object sender, EventArgs e) {
    MySqlConnection connection = Connection.prevzemiKonekcija();
    connection.Open();
try
{
    MySqlCommand command;
    MySqlDataAdapter adapter;
    DataTable tabela;
    MySqlDataReader reader;

    string query = "SELECT * FROM artikli WHERE barcode  like '%" + txtBarajKod.Text + "%'";
    command = new MySqlCommand(query, connection);
    adapter = new MySqlDataAdapter(command);
    tabela = new DataTable();

    reader = command.ExecuteReader();

    //dataGridView1.DataSource = tabela;
    //adapter.Fill(tabela);
    if (string.IsNullOrWhiteSpace(txtBarajKod.Text))
        return;

    if (reader.Read())
    {
        txtBarajKod.Text = reader.GetString("barcode");
        txtNaziv.Text = reader.GetString("ProductName");
        txtCena.Text = reader.GetString("SellPrice");
    }
    else
    {
        txtBarajKod.Text = "";
        txtNaziv.Text = "";
        txtCena.Text = "";
        txtKolicina.Text = "";
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    connection.Close();
}
}

2 个答案:

答案 0 :(得分:0)

每次键入内容时都会触发

TextChanged事件。您有几种解决方案:

  1. 使用TextBox离开事件代替TextChanged
  2. 如果条形码的长度都相同(可能是相同),则可以添加if(txtBarajKod.Text.Lenght < your_barcode_size){ return; }
  3. 使用Keypress方法,如果按Enter键(如果您的输入是条形码读取器,这将是最佳选择,因为它在末尾添加Enter键),然后运行您编写的此检查:

    private void KeyDownEvent(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Return) { //Place your code here } }

答案 1 :(得分:-1)

文本框的初始值为空字符串。设置此初始值时,将触发事件。结果,您的where条件包含子句WHERE barcode like '%%',该子句将选择所有内容。

为避免这种情况,请将以下代码添加到方法的开头:

If txtBarajKod.Text = String.Empty Then
    Return
End If

尽管,正如其他人在评论中指出的那样,这种设计本质上是不安全的。它为SQL Injection Attacks提供了门户。