如何使用两个日期之间的日期从我的数据库中获取数据

时间:2013-10-12 10:30:38

标签: c# datagridview oledb ms-access-2010 datetimepicker

我的工作是在DataGridView中输出我的表列名,但是我的数据没有显示出来的是他们在这里缺少的东西吗?

        private void button1_Click(object sender, EventArgs e)
        {
            DateTime dt = this.dateTimePicker1.Value.Date;

            DateTime dt2 = this.dateTimePicker1.Value.Date;

            command.CommandType = CommandType.Text; 
           command.CommandText = ("SELECT * FROM BillingSystem WHERE DateOfTransaction BETWEEN #" + dt.ToShortDateString() + "# AND #" + dt2.ToShortDateString() + "#");

           OleDbDataAdapter adapter = new OleDbDataAdapter(command.CommandText, connectionBilling);
           DataSet ds = new DataSet();

           adapter.Fill(ds);
           dataGridView1.DataSource = ds.Tables[0];
           connectionBilling.Close();

            }

1 个答案:

答案 0 :(得分:0)

嗯,我看到两个日期是相同的(可能你想在BETWEEN语句中包含一整天)。所以我会尝试更改您的查询以使用参数化查询而不是字符串连接并修复日期包含部分。

   private void button1_Click(object sender, EventArgs e)
   {
        string cmdText = "SELECT * FROM BillingSystem " + 
                         "WHERE DateOfTransaction BETWEEN ? AND ?";

        DateTime dt = this.dateTimePicker1.Value.Date;
        DateTime dt2 = this.dateTimePicker1.Value.Date.AddMinutes(1440);
        command.CommandText = cmdText;
        command.Parameters.AddWithValue("@p1",dt1);
        command.Parameters.AddWithValue("@p2",dt2);
        OleDbDataAdapter adapter = new OleDbDataAdapter(command, connectionBilling);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];
        connectionBilling.Close();
    }

请注意,我在第二个日期添加了1440分钟(24小时) 这将允许在BETWEEN语法中包含一整天,因为Access还在DateOfTransaction字段中存储TIME部分,如果没有此修复,则没有日期与查询匹配(除非某些trasactions恰好发生在午夜)

参数化查询也不需要指定日期周围的任何格式(并且没有Sql注入的可能性)