我刚刚花了几个小时尝试做一些我认为非常简单的事情。当我尝试在Access 2007数据库上运行带日期的参数化查询时,我遇到“条件表达式中的数据类型不匹配”错误。数据库中的问题列是“日期/时间”数据类型。
在一个简化的例子中 -
dataCommand.CommandText "SELECT * FROM tblData WHERE IDate > #24/07/2013 16:54:51#"
这很有效。但是一旦我尝试参数化日期,我就会遇到错误。所以..
dataCommand.CommandText = "SELECT * FROM tblData WHERE IDate > @BackSearchDate"
....
dataCommand.Parameters.Add(new OleDbParameter("@BackSearchDate", backSearchDate))
会遇到错误。我试图以多种方式提供backSearchDate变量。 DateTime,各种格式的字符串等不起作用。
我发现this page表示这是一个已知的错误 - 但我无法让页面上的任何变通办法工作。我很难过。
提前感谢您的帮助。
答案 0 :(得分:0)
所以我要说的是:
dataCommand.CommandText = "SELECT * FROM tblData WHERE IDate > @BackSearchDate"
修改强>
查看Gord Thompson的答案表明你应该尝试:
var conn = new OleDbConnection(@"ConnString");
conn.Open();
var cmd = new OleDbCommand(
"SELECT * FROM tblData WHERE IDate > @BackSearchDate",
conn);
cmd.Parameters.AddWithValue("@BackSearchDate", new DateTime(backSearchDate));
OleDbDataReader rdr = cmd.ExecuteReader();
答案 1 :(得分:0)
对于将来遇到此问题的任何人 - 如果您按以下方式添加参数,它似乎有效:
DbParameter p = dataCommand.CreateParameter();
p.ParameterName = "@BackSearchDate";
p.Value = backSearchDate;
p.DbType = DbType.Date;
dataCommand.Parameters.Add(p);