我想只有sql值,其中datetime的值在2个值之间。
我使用此代码
filterdatum = "(Datum >= "+ startwaarde + " AND Datum < "+ eindwaarde+ ")";
filter = filter + " AND " + filterdatum;
我的过滤器将如下所示:
where "(Type like '%13%') AND (Datum >= 11/04/2013 00:00:00 AND Datum < 23/04/2013 00:00:00)"
我总是收到这个错误:
&#39; 00&#39;附近的语法不正确。
答案 0 :(得分:4)
将日期放在单引号之间:
filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";
filter = filter + " AND " + filterdatum;
提示:下次可以进行的简单测试是直接在数据库中执行查询,并检查它是否有效。
答案 1 :(得分:3)
更好的选择是将日期值作为参数传递给查询。将日期值作为字符串直接放在查询字符串中总是有问题的。创建和传递参数的确切代码取决于您的数据访问技术。
如果您使用的是ADO.NET,则应该写:
filterdatum = "(Datum >= @startDate AND Datum < @endDate)";
...
command.Parameters.AddWithValue("@startDate", startwaarde);
command.Parameters.AddWithValue("@endDate", eindwaarde);
答案 2 :(得分:2)
确保引用DateTimes,否则您的SQL可能会认为它们是表/列名称?
答案 3 :(得分:2)
您应该在日期值之间使用单引号。
filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";
但更重要的是,您应该始终使用 parameterized queries ,此类代码对 SQL Injection 攻击开放。
例如;
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT * From YourTable WHERE Datum >= @startwaarde AND Datum < @eindwaarde";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@startwaarde", startwaarde);
cmd.Parameters.Add("@eindwaarde", eindwaarde);
SqlDataReader reader = cmd.ExecuteReader();
答案 4 :(得分:0)
startwaarde.ToString("o")
执行此操作,假设startwaarde
的类型为DateTime。(Datum >= @1 AND Datum < @2)
并将这两个值作为参数添加到SqlCommand
,假设您正在对数据库进行过滤。