我看过更多的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'。
我尝试用各种东西包围我的变量(括号,'标记,[]等)。似乎没有任何东西可以使它工作(尽管其中一些项目的错误会改变为“缺失或无效参数”的效果。
我确信这是我的一些愚蠢的小错字,但我找不到它的生命。有什么想法吗?
答案 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)
我不知道是不是所有问题,但我认为你需要在引号中加上日期。你可能已经尝试了这个并错过了一个,这会给你不匹配的引号。