2012-03-12 5 views
1

SQLサーバーが戻ってくるエラーと非常に混同されています。オブジェクト・タイプWebMatrix.Data.DynamicRecordから既知の管理対象プロバイダのネイティブ・タイプへのマッピングがありません

私が実行しているC#のコードは次のとおりです。

List<CalendarEvent> events = new List<CalendarEvent>(); 
     var db = Database.Open("myDatabase"); 
     string username = HttpContext.Current.Request.Cookies.Get("username").Value; 
     var listOfGroups = db.Query("SELECT GroupID FROM Membership WHERE UserID = (SELECT UserID from Users WHERE Username = @0)", username); 

     foreach(var groupID in listOfGroups) 
      { 
       var result = db.Query(
        @"SELECT e.event_id, e.title, e.description, e.event_start, e.event_end, e.group_id, e.recurring 
        FROM event e 
        JOIN Membership m ON m.GroupID = e.group_id 
        WHERE e.recurring = 0 
        AND m.GroupID = @0 
        AND e.event_start >= @1 
        AND e.event_end <= @2 
        UNION ALL 
        SELECT e.event_id, e.title, e.description, DATEADD(week, w.weeks, e.event_start), DATEADD(week, w.weeks, e.event_end), e.group_id, e.recurring 
        FROM event e 
       JOIN Membership m ON m.GroupID = e.group_id 
       CROSS JOIN 
        (SELECT row_number() OVER (ORDER BY Object_ID) AS weeks 
        FROM SYS.OBJECTS 
        ) AS w 
        WHERE e.recurring = 1 
        AND m.GroupID = $3 
        AND e.event_start >= @4 
        AND e.event_end <= @5", groupID, start, end, groupID, start, end 
       ); 
       foreach(var record in result) 
        { 
          CalendarEvent cevent = new CalendarEvent(); 
          cevent.id = record.event_id; 
          cevent.title = record.title; 
          cevent.description = record.description; 
          cevent.start = record.event_start; 
          cevent.end = record.event_end; 
          cevent.recurring = record.recurring; 
          events.Add(cevent); 
        } 
      } 
     return events; 
} 

とエラー:この原因とどのように何ができるか

​​

は、私はそれを修正することができますか?

私がしたいことは、繰り返し= 0のすべてのイベントと、繰り返し= 1のイベントを返すことです。その週とその52週間後に返されることを望みます。

答えて

1

あなたの問題は、入力パラメータgroupIDのようです。あなたのlistOfGroups

var listOfGroups = db.Query("SELECT GroupID FROM Membership WHERE UserID = (SELECT UserID from Users WHERE Username = @0)", username); 

WebMatrix.Data.DynamicRecordオブジェクトのコレクションとして戻って来ています。 foreach(var groupID in listOfGroups)文でgroupIDを取得すると、intの値だけが必要なようです。これはその値がされ、各ダイナミッククエリ結果の最初の(そして唯一の)列の値を引くべき

AND e.event_end <= @5", (int)groupID.GroupID, start, end, (int)groupID.GroupID, start, end 

:で

AND e.event_end <= @5", groupID, start, end, groupID, start, end 

は最後の行を交換する代わりに、試しあなたが後にしているintグループID。

EDIT: DynamicRecordクエリ結果の修正値呼び出し構文。

+0

本当にありがとうございますが、このコードは実際には "無効な列名"の項目を返します " –

+1

申し訳ありませんが、私はWebMatrixの新機能です。 –

+1

また、foreachで宣言されたローカルパラメータから 'groupID'という名前をrowなどの名前に変更して、各オブジェクトが結果であることを明確にすることもできます –