0

我只想拥有日期时间值介于 2 个值之间的 sql 值。

我使用此代码

 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)"

我总是收到这个错误:

'00' 附近的语法不正确。

4

5 回答 5

4

将日期放在单引号之间:

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";
 filter = filter + " AND " + filterdatum;

提示:你下次可以做的一个简单测试是直接在你的数据库中执行你的查询并检查它是否有效。

于 2013-04-23T07:49:10.360 回答
3

更好的选择是将日期值作为参数传递给查询。将日期值作为字符串直接放在查询字符串中总是有问题的。创建和传递参数的确切代码取决于您的数据访问技术。

如果你使用 ADO.NET,你应该写:

filterdatum = "(Datum >= @startDate AND Datum < @endDate)";
...
command.Parameters.AddWithValue("@startDate", startwaarde);
command.Parameters.AddWithValue("@endDate", eindwaarde);
于 2013-04-23T07:57:37.680 回答
2

您应该在日期值之间使用单引号。

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";

但更重要的是,您应该始终使用参数化查询,这种代码对SQL 注入攻击是开放的。

例如;

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();
于 2013-04-23T07:54:59.993 回答
2

确保引用 DateTimes,否则您的 SQL 可能会认为它们是表/列名?

于 2013-04-23T07:48:12.380 回答
0
  1. 将您的日期/时间值放在引号之间。
  2. 确保您的日期/时间值的格式符合ISO 8601。您可以使用 来执行此操作startwaarde.ToString("o"),假设startwaarde是 DateTime 类型。
  3. 最好的方法是使用参数。因此,您的 SQL 将如下所示:(Datum >= @1 AND Datum < @2)并且您将这两个值作为参数添加到 中SqlCommand,假设您正在对数据库进行过滤。
于 2013-04-23T08:40:29.087 回答