首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“条件表达式中的数据类型不匹配”子查询中包含OleDbCommand

问“条件表达式中的数据类型不匹配”子查询中包含OleDbCommand
EN

Stack Overflow用户
提问于 2017-01-23 04:42:19
回答 1查看 70关注 0票数 0

我得到一个“数据类型不匹配的条件表达式”与一个OleDbCommand,我有一个子查询。实际的数据库是Access,尽管我不确定它能不能将查询提供给数据库。

代码语言:javascript
复制
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一起使用?

更新:尝试设置日期类型,结果没有什么不同

代码语言:javascript
复制
cmd.Parameters.Add("@EventDate", OleDbType.Date); 
cmd.Parameters["@EventDate"].Value = EventDate;
EN

回答 1

Stack Overflow用户

发布于 2017-01-24 06:26:13

答案是首先计算子查询。任何使用过OleDbCommand的人很快就会发现参数的名称并不重要,重要的是顺序,它必须与参数在sql中的顺序相匹配。然而,在这种情况下,我猜是因为子查询首先被求值,然后必须首先提供它的参数,即使它们在sql语句中最后出现!

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41795921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档