【问题标题】:SqlException: Incorrect syntax near the keyword 'AS'SqlException:关键字“AS”附近的语法不正确
【发布时间】:2011-06-09 08:46:02
【问题描述】:

我检查了参数和字段,没有拼写错误,但我仍然得到那个错误..

        StringBuilder sb = new StringBuilder();
    sb.Append("SELECT u.Name,t.ThreadTitle,t.Date, t.Views,t.Replies,p.Theme,p.Topics,t.PageNumber");
    sb.Append("FROM Users AS u");
    sb.Append("INNER JOIN Threads AS t ON u.UserID=t.UserID");
    sb.Append("INNER JOIN Topics AS p ON p.TopicID=t.TopicID");
    sb.Append("WHERE u.UserID=@UserID");
    sb.Append("ORDER BY t.Date");

另一个问题将按日期排序。据我所知,该字段的类型为 TimeDate。

【问题讨论】:

  • 也许你需要添加空格?例如: t.PageNumber 和 FROM 将是一个单词,因为它们被附加在一起而没有空格...?
  • 1.也许你应该只使用 AppendLine() 方法? 2. 按日期排序应该可以。

标签: c# asp.net sql


【解决方案1】:

“Users AS u”和“INNER JOIN”之间没有空格。添加空格:

StringBuilder sb = new StringBuilder();
sb.Append("SELECT u.Name,t.ThreadTitle,t.Date, t.Views,t.Replies,p.Theme,p.Topics,t.PageNumber ");
sb.Append("FROM Users AS u ");
sb.Append("INNER JOIN Threads AS t ON u.UserID=t.UserID ");
sb.Append("INNER JOIN Topics AS p ON p.TopicID=t.TopicID ");
sb.Append("WHERE u.UserID=@UserID ");
sb.Append("ORDER BY t.Date"); 

或者,通过调用 AppendLine 而不是 Append 来使用换行符。

更好的是,因为这只是一个长字符串,所以使用逐字字符串:

var sql = @"
SELECT u.Name,t.ThreadTitle,t.Date, t.Views,t.Replies,p.Theme,p.Topics,t.PageNumber
FROM Users AS u
INNER JOIN Threads AS t ON u.UserID=t.UserID
INNER JOIN Topics AS p ON p.TopicID=t.TopicID
WHERE u.UserID=@UserID
ORDER BY t.Date";

【讨论】:

    【解决方案2】:

    您将所有内容附加到一行。添加空格或使用 AppendLine 而不是 Append。

    【讨论】:

      【解决方案3】:

      试试这个:

      StringBuilder sb = new StringBuilder();
      sb.Append("SELECT u.Name,t.ThreadTitle,t.Date, t.Views,t.Replies,p.Theme,p.Topics,t.PageNumber");
      sb.Append(" FROM Users AS u");
      sb.Append(" INNER JOIN Threads AS t ON u.UserID=t.UserID");
      sb.Append(" INNER JOIN Topics AS p ON p.TopicID=t.TopicID");
      sb.Append(" WHERE u.UserID=@UserID");
      sb.Append(" ORDER BY t.Date");
      

      是的,orderby 应该可以工作。

      【讨论】:

      • 谢谢。我还有另一个问题。如何将读取器中的参数转换为 int.. Views = int.Parse(dr["Views"].ToString()); (博士是 SQLDataReader)。它给了我输入字符串的格式不正确
      • @NewOrder,Views 列的数据类型是什么?如果是 int 则使用 int Views = dr.GetInt32(3);
      猜你喜欢
      • 2016-06-08
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多