SQL查询不起作用 - 运算符丢失

时间:2011-09-15 16:32:24

标签: c# 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&gt; 9/4/2011 12:00:00 AM AND ENTRY_TIME&lt; 9/10/2011 12:00:00 AM   AND ACT_ENTRY2CASE不是NULL'。

我尝试用各种东西包围我的变量(括号,'标记,[]等)。似乎没有任何东西可以使它工作(尽管其中一些项目的错误会改变为“缺失或无效参数”的效果。

我确信这是我的一些愚蠢的小错字,但我找不到它的生命。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您需要将starttime和endtime放在引号内(如果您的数据库中只有字符串表示日期)或使用To_Date()sql函数将日期转换为sql日期对象...

然而,最好将sql参数化以使其安全并提高性能。

答案 1 :(得分:4)

首先,您的代码容易受到SQL Injection的攻击。<​​/ p>

您应该参数化您的查询。这是“teh 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();

答案 2 :(得分:0)

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