C# &引用;“条件表达式中的数据类型不匹配”;在子查询中使用OleDbCommand
我得到了一个“条件表达式中的数据类型不匹配”的OLEDB命令,其中我有一个子查询。实际的数据库是Access,尽管我不确定它是否能够向数据库显示查询C# &引用;“条件表达式中的数据类型不匹配”;在子查询中使用OleDbCommand,c#,ms-access,ado.net,C#,Ms Access,Ado.net,我得到了一个“条件表达式中的数据类型不匹配”的OLEDB命令,其中我有一个子查询。实际的数据库是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,@A
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);
使用cmd.Parameters.Add(名称、类型).Value=Value而不是AddWithValue。特别是当您尝试将日期传递给ms access enginethanks时,尝试了这样做,但没有任何区别(请参阅更新)尝试使用
cmd.Parameters.AddWithValue(@EventDate)、DateTime(EventDate.Year、EventDate.Month、EventDate.Day、EventDate.Hour、EventDate.Minute、EventDate.Second)省略EventDate的毫秒部分代码>。据我所知,您的问题似乎来自如何处理OleDbType
treatsDateTime
参数。