SQL查询不工作——缺少操作符



我已经看过更多的SQL问题比我关心计数,但似乎没有什么是为这个特定的问题工作。我正在使用以下代码对c#中的访问数据库运行SELECT查询:

DateTime starttime = new DateTime(2011, 9, 4);
DateTime endtime = new DateTime(2011, 9, 10);
cmd.CommandText = @"SELECT ACT_ENTRY2CASE,ACT_ENTRY2USER FROM SA_TABLE_ACT_ENTRY WHERE ENTRY_TIME>" + starttime + @" AND ENTRY_TIME<" + endtime + @" AND ACT_ENTRY2CASE IS NOT NULL";
reader = cmd.ExecuteReader();

我得到错误:

查询表达式中语法错误(缺少操作符)ENTRY_TIME>9/4/2011 12:00:00 AM和ENTRY_TIME<9/10/2011 12:00:00 AMAND ACT_ENTRY2CASE不为空'.

我试过用各种各样的东西(括号,'标记,[]等)包围我的变量。似乎没有什么能使它工作(尽管其中一些项目的错误改变为"缺少或无效的参数"的效果。

我肯定这是我的一个愚蠢的小打字错误,但我怎么也找不到。什么好主意吗?

首先,你的代码很容易受到SQL注入的攻击。

你应该参数化你的查询。这是" the codez":

cmd.CommandText = @"
   SELECT ACT_ENTRY2CASE,ACT_ENTRY2USER 
   FROM SA_TABLE_ACT_ENTRY 
   WHERE ENTRY_TIME> @starttime 
   AND ENTRY_TIME< @endtime 
   AND ACT_ENTRY2CASE IS NOT NULL";
cmd.Parameters.AddWithValue("@starttime", starttime);
cmd.Parameters.AddWithValue("@endtime ", endtime );
reader = cmd.ExecuteReader();

你需要把你的开始时间和结束时间在引号内(如果你只是有一个字符串表示的日期在你的数据库)或使用To_Date() sql函数将你的日期转换为sql日期对象…

然而,最好是参数化你的sql,使其安全,并提高性能。

我不知道这是否是问题的全部,但我认为你需要在你的日期中加上引号。您可能已经尝试过了,但是错过了一个,它会给您不匹配的引号。

最新更新