【问题标题】:How to search between 2 dates on access database vs?如何在访问数据库与 2 个日期之间进行搜索?
【发布时间】:2020-01-09 16:47:48
【问题描述】:

我正在尝试此代码,但它在 da.Fill(dt) 上显示错误

No value given for one or more required parameters.

为什么会显示该错误?我清楚地检查了所有数据库、表和字段的名称,它们都是正确的,并且我使用日期/时间字段作为日期时间。

你能帮我解决这个问题吗?

     string conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ahmed\OneDrive\Documents\shop.accdb";
       OleDbConnection ccc = new OleDbConnection(conn);
        ccc.Open();
        string css = "SELECT * from tbl3 Where dateitem between '" + dateTimePicker1.Value.ToString() + "%' AND '" + dateTimePicker2.Value.ToString()+"%'";
        OleDbCommand non = new OleDbCommand(css, ccc);
        OleDbDataAdapter da = new OleDbDataAdapter(non);
        DataTable dt = new DataTable();
        da.Fill(dt);
        count = Convert.ToInt32(dt.Rows.Count.ToString());
        dataGridView1.DataSource = new BindingSource(dt, null);

【问题讨论】:

  • 使用参数代替自己烘焙SQL
  • 这不是查询数据库的方法。你需要use parameters
  • ... 并将日期作为日期而不是字符串传递。
  • 你的数据库可以在日期字符串中使用 % 吗?!
  • 是的,它可以使用 % 我试过了,但同样的错误

标签: c#


【解决方案1】:

正如其他人所提到的,您应该使用参数而不是硬编码值。

using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ahmed\OneDrive\Documents\shop.accdb"))
{
    conn.Open();
    // DbCommand also implements IDisposable
    using (OleDbCommand cmd = conn.CreateCommand())
    {
        var param1 = new OleDbParameter("@DateTimePicker1", OleDbType.DBDate); //you may have to play with different types
        param1.Value = dateTimePicker1.Value;
        cmd.Parameters.Add(param1);

        var param2 = new OleDbParameter("@DateTimePicker2", OleDbType.DBDate);
        param2.Value = dateTimePicker2.Value;
        cmd.Parameters.Add(param2);

        cmd.CommandText = "SELECT * from tbl3 Where datetime >= @DateTimePicker1 and datetime <= @DateTimePicker2";

        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        count = Convert.ToInt32(dt.Rows.Count.ToString());
        dataGridView1.DataSource = new BindingSource(dt, null);
    }
}

【讨论】:

  • OleDbConnection ccc = new OleDbConnection(conn);有错误
  • 请查看更新后的代码。您不再需要OleDbConnection ccc = new OleDbConnection(conn);
  • 谢谢,我试过这段代码看起来很糟糕,但是在按下ds.Fill(dt); 上的按钮后出现错误 = 没有为一个或多个必需参数提供值。
  • 我将 DateTimePicker 的格式设置为 long 并且在访问 DB 上我将设计视图设置为 long
  • 我很抱歉。请查看最新更新的代码。如果它不起作用,请确保您可以在访问中打开 tbl3,而无需访问请求您输入。 编辑还要确保你的 dateTimePicker1 和 dateTimePicker2 有价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多