2012-02-05 13 views
1

私のクエリのSELECT文に問題があります。このSQLクエリはSqlServer Management Studioで動作し、要求されたデータを選択しますが、私のクラスでは「クエリ構文が無効です。近頃 '*'、9行目、47列目」というエラーが表示されます。 LastPostBy、LastPostDate、LastPostTitleを取り出した後の私のFrom F句の別のエラーLastPostTitleにもエラーが表示されますが、SQLServer Management Studioで動作しているようです。私は最初に "Exec sproc_Forums_GetForums"ストアドプロシージャを実行しようとしましたが、これは動作しませんでした。これはEntitiesでこのアプローチを使用する私の最初の試みです。 すべての私のクエリを行うこととしている。これは、有効なESQLクエリではありませんフォーラムを取得し、フォーラムや投稿という名前の2つのテーブル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

+0

どのようにSQL Serverプロファイラを使用し、VS2010のどこにある – ONYX

+0

あなたのSQL管理スタジオ、ツール - >プロファイラーを開きます:) –

答えて

7

からの情報を表示しています。 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を実行してください。