【问题标题】:Can't see how this simple SQL query is 'malformed'!看不出这个简单的 SQL 查询是如何“畸形”的!
【发布时间】:2012-06-30 19:11:48
【问题描述】:
     QueryText = string.Format("SELECT {0}, {1} Path FROM Scope() "
                                + "WHERE {0} = 'test' AND {1} BETWEEN '"
                                + minimumDate.ToString("yyyy-MM-dd HH:mm:ss") + "' AND '" + maximumDate.ToString("yyyy-MM-dd HH:mm:ss")
                                + "' ORDER BY {1} Desc", "TestField", "DateField");

minimumDate 和 maximumDate 的类型为 DateTime (.net DateTime)。这是一个全文SQLQuery。

注意:在添加日期之间的子句之前 - 这个查询很好,所以字段肯定存在等等。

编辑:实际查询字符串:

"SELECT TestField, DateField FROM Scope() WHERE TestField = 'test' AND DateField BETWEEN '2011-06-30 09:41:23' AND '2012-06-29 09:41:23' ORDER BY DateField  Desc"

编辑:我犯了一个错误,声明它在 between 子句之前起作用 - 我一定是篡改了 select,因为我省略了一个重要的逗号。

【问题讨论】:

  • 替换后你的实际QuerText是什么
  • 请始终使用 SqlParameter 而不是字符串连接。你会避免很多头痛。 SqlParameters 将帮助您正确地将类型转换为实际的 SQL 查询,而无需处理自定义模式。而且您的代码将更具可读性。
  • 参见 OP。 @SteveB - FullTextSQLQuerys 可能的参数?
  • @DeeMac:我不知道。我从未尝试过:) 我还没有看到你问题的这一部分。请尝试将您的实验结果告诉我们:)
  • @DeeMac 不,但那 不是 全文查询...但 SteveB 是对的;参数会更好

标签: c# sql datetime


【解决方案1】:

Path 之前缺少逗号。

【讨论】:

  • 就是这样。非常感谢!!假设您实际上是指逗号!?
  • 我不明白什么似乎是正确的答案,这让我很担心。
  • 是的,这就是我的意思,英语不是我的第一语言:),我会在答案文本中更改它。
【解决方案2】:

对日期使用 CONVERT():

BETWEEN CONVERT(datetime, 'here put date', 120)  AND CONVERT(datetime, 'here put date', 120)

【讨论】:

【解决方案3】:

您不应该在 .net 中编写这样的查询。您应该使用 db 参数:

string commandText = string.Format("SELECT {0}, {1} FROM Scope() "
                            + "WHERE {0} = 'test' AND {1} BETWEEN '@minDate' "
                            + "AND '@maxDate'"
                            + " ORDER BY {1} Desc", "TestField", "DateField");

SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@minDate", SqlDbType.SqlDateTime);
command.Parameters["@minDate"].Value = minimumDate;
command.Parameters.Add("@maxDate", SqlDbType.SqlDateTime);
command.Parameters["@maxDate"].Value = maximumDate;

【讨论】:

  • @Downvoter,为什么要投反对票?在 sql 语句中使用参数是您应该这样做的方式。
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多