[英]“Data type mismatch in criteria expression” with an OleDbCommand in subquery
我在其中有一个子查询的OleDbCommand中收到“条件表达式中的数据类型不匹配”。 实际的数据库是Access,尽管我不确定它能否将查询呈现给数据库。
DateTime EventDate;
string HT,AT;
int HS,AS;
OleDbCommand cmd
cmd.CommandText = @"INSERT INTO TheTable (EventDate,HT,HS,[AS],[AT])
SELECT top 1 @EventDate,@HT,@HS,@AS,@AT FROM TheTable
WHERE NOT EXISTS (SELECT 1 FROM TheTable WHERE HT=@HT2)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@EventDate", EventDate);
cmd.Parameters.AddWithValue("@HT", HT);
cmd.Parameters.AddWithValue("@HS", HS);
cmd.Parameters.AddWithValue("@AS", AS);
cmd.Parameters.AddWithValue("@AT", AT);
cmd.Parameters.AddWithValue("@HT2", HT);
如果我删除子查询,它工作正常。 我确信我所有的变量都是正确的类型并且是有效值。 如果我拿走子查询,它工作正常。
关于子查询,是否有一些参数无法与OleDbCommand一起使用?
更新:尝试设置日期类型,没有区别
cmd.Parameters.Add("@EventDate", OleDbType.Date);
cmd.Parameters["@EventDate"].Value = EventDate;
答案是首先查询子查询。 任何使用过OleDbCommand的人很快就会发现,参数的名称无关紧要,因为顺序必须与sql中的参数顺序匹配。 但是,在这种情况下,我想是因为子查询首先被求值,然后即使其在sql语句中排在最后 ,也必须首先提供其参数!
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@HT2", HT);
cmd.Parameters.AddWithValue("@EventDate", EventDate);
cmd.Parameters.AddWithValue("@HT", HT);
cmd.Parameters.AddWithValue("@HS", HS);
cmd.Parameters.AddWithValue("@AS", AS);
cmd.Parameters.AddWithValue("@AT", AT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.