将日期从dateTimePicker保存到ms访问数据库并在两个日期之间搜索记录

时间:2017-04-04 11:17:47

标签: c# ms-access-2010 select-query

我有ms访问表' AddDate'。两栏' Id' -Autonumber,' AddDate' -DateTime。

在VS 2015中我有一个表单,我有一个dateTimePicker来插入日期值。

我使用以下查询来插入日期:

       conn.Open();string str = "Insert into AddDate ([AddDate]) Values(@AddDate)";
        OleDbCommand cmd = new OleDbCommand(str, conn);
        cmd.Parameters.AddWithValue("@AddDate", dateTimePicker1.Value.ToShortDateString());
        cmd.ExecuteScalar();
        conn.Close();

当我输入记录时,我想在两个日期之间搜索这些记录。 为此,我有两个datetimepicker,我使用以下代码进入datagridview:

        OleDbDataAdapter odb = new OleDbDataAdapter("Select * from AddDate  where AddDate Between '"+dateTimePicker1.Value.ToShortDateString() + "' and '"+ dateTimePicker2.Value.ToShortDateString() + "' ", conn);
        DataTable dt = new DataTable();
        odb.Fill(dt);

        dataGridView1.DataSource = dt;

现在,如果ms访问表AddDate列设置为DateTime,则select查询将在条件表达式'中给出错误“数据类型不匹配”。如果我将列DataType属性更改为ms访问表中的文本,则查询可以正常工作,但它会收集表中两个日期之间的所有记录,而不管月份。

请用示例和完整代码进行说明。还要在MS Access 2010中指定DataType属性。

提前感谢。

关心Manoj Yadwad。

1 个答案:

答案 0 :(得分:0)

日期不是字符串,因此:

cmd.Parameters.AddWithValue("@AddDate", dateTimePicker1.Value);

但要连接,您必须格式化为有效的日期表达式:

OleDbDataAdapter odb = new OleDbDataAdapter("Select * from AddDate where AddDate Between #" + dateTimePicker1.Value.ToString("yyyy'/'MM'/'dd") + "# and #" + dateTimePicker2.Value.ToString("yyyy'/'MM'/'dd") + "#", conn);

最好也是在这里使用参数。