我有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。
答案 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);
最好也是在这里使用参数。