【问题标题】:Access Multiple search filter [closed]访问多个搜索过滤器[关闭]
【发布时间】:2016-07-15 18:10:19
【问题描述】:

我正在尝试单击文本框上具有多个输入的搜索按钮。 我环顾四周并尝试了不同的方法,但不知何故它没有成功。下面是点击事件的代码:

private void btn_table_Click(object sender, EventArgs e) {
    try {
        connection.Open();

        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;

        string query = "select [Name],[Sex],[Number] from RecordsSheet [Name] like('" + textBox1.Text + "%'),[Sex]=('" + textBox2.Text + "%'),[Number]=('" + textBox3.Text + "%'");

        command.CommandText = query;

        OleDbDataAdapter da = new OleDbDataAdapter(command);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dataGridView1.DataSource = dt;

        connection.Close();
    }
    catch (Exception ex) {
        MessageBox.Show("Error " + ex);
    }
}

【问题讨论】:

    标签: c# ms-access filter


    【解决方案1】:

    您目前在同一操作中混合使用 equals 和 LIKE 语法,这将导致一些格式不正确的查询,以及缺少 WHERE 子句来正确使用它们。

    使用参数化

    如果您有特定的搜索词,请考虑将其作为参数添加到您的查询中预定义的 LIKE 部分:

    // Add your properties using parameters
    var query = "SELECT [Name],[Sex],[Number] FROM RecordsSheet WHERE [Name] LIKE ? AND [Sex] LIKE ?,[Number] LIKE ?";
    

    然后添加您的参数以及必要的通配符来构建您的查询:

    OleDbDataAdapter da = new OleDbDataAdapter(command);
    // Set your parameters
    da.SelectCommand.Parameters.AddWithValue("p1",textBox1.Text + "*");
    da.SelectCommand.Parameters.AddWithValue("p2",textBox2.Text + "*");
    da.SelectCommand.Parameters.AddWithValue("p3",textBox3.Text + "*");
    

    这种方法不仅可以解决与语法相关的问题,还可以帮助保护您免受 SQL 注入攻击等令人讨厌的事情的侵害。

    【讨论】:

      【解决方案2】:

      用 [Sex] 和 [Number] 将“=”替换为“like”,这可能会有所帮助.. 如果不发布结果说明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多