Между "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";