2012-02-05 23 views
1

我的查询中的select语句有问题。这个sql查询在SqlServer Management Studio中工作,并选择了请求的数据,但在我的类中,它给了我一个错误“查询语法无效。近期'*',第9行,第47列。那么我的From论文F子句中的另一个错误就是在取出LastPostBy,LastPostDate和LastPostTitle之后,我也在LastPostTitle中发生错误,但正如我所说的那样,它在SQLServer Management Studio中起作用。我最初试图做一个“Exec sproc_Forums_GetForums”存储过程,并没有工作,这是我第一次尝试在实体中使用这种方法。 我所有的查询假设做的就是一个论坛,并从两个表中显示的信息命名论坛和帖子EntityCommand SQL错误

public List<Forum> GetForums() 
    { 
     List<Forum> forums = null; 
     using (EntityConnection conn = new EntityConnection("name=CMSEntities")) 
     { 
      conn.Open(); 
      string query = @" 
       SELECT ForumGroup = (
        CASE WHEN ParentID IS NOT NULL THEN 
         (SELECT Title FROM Forums WHERE ForumID = F.ParentID)   
        ELSE 
         (SELECT Title FROM Forums WHERE ParentID IS NULL) 
        END), 
       F.Title, F.Description, 
       ThreadCount = (SELECT COUNT(*) FROM Posts P WHERE P.ForumID = F.ForumID), 
       LastPostBy = (SELECT TOP 1 AddedBy FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC), 
       LastPostDate = (SELECT TOP 1 AddedDate FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC), 
       LastPostTitle = (SELECT TOP 1 Title FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC)  
       FROM Forums F WHERE ParentID IS NOT NULL  
       ORDER BY Title 
      "; 
      EntityCommand cmd = new EntityCommand(query, conn); 
      using (EntityDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess)) 
      { 
       while (reader.Read()) 
       { 
        Forum forum = new Forum(
         (int)reader["ForumID"], 
         "", 
         DateTime.Now, 
         reader["Title"].ToString(), 
         reader["Description"].ToString(), 
         0, 
         false, 
         null, 
         null, 
         null, 
         true, 
         reader["ForumGroup"].ToString(), 
         (int)reader["ThreadCount"], 
         reader["LastPostBy"].ToString(), 
         (DateTime)reader["LastPostDate"], 
         reader["LastPostTitle"].ToString()); 
        forums.Add(forum); 
       } 
       return forums; 
      } 
     } 
    } 
} 
+0

这里有个建议:使用SQL Server Profiler查看发送给SQL Server的确切查询是什么。 – Beatles1692 2012-02-05 08:45:18

+0

你如何使用SQL Server Profiler和VS2010在哪里 – ONYX 2012-02-05 09:00:55

+0

打开你的sql管理工作室,tools-> profiler :) – 2012-02-05 09:19:45

回答

7

这是无效的ESQL查询。您不能在SQL管理中进行SQL查询并将其作为ESQL执行。 ESQL是不同的查询语言,它自己的语法接近于SQL,但仍然存在差异,因为它不查询数据库而是查询实体模型。例如,ESQL中的简单查询如下所示:

SELECT VALUE Entity FROM Namespace.Entities AS Entity WHERE Entity.SomeField = 10 

您是否看到与普通SQL有所不同?

而不是使用ESQL和EntityCommand使用SqlCommand执行SQL查询或ObjectContext.ExecuteStoreQuery