从对象类型WebMatrix.Data.DynamicRecord到已知的托管提供程序本机类型不存在映射

我对SQL服务器返回的错误感到很困惑 – 这会导致什么?

我正在运行的C#代码是:

List events = new List(); 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 = @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; } 

而错误:

exception详细信息:System.ArgumentException:从对象类型WebMatrix.Data.DynamicRecord到已知的托管提供程序本机类型不存在映射。

可能导致这种情况的原因以及如何解决?

我想要做的是返回所有重复发生的事件= 0,以及任何重复发生的事件= 1我希望在本周和之后的52周内返回。

看起来您的问题与您的groupID输入参数有关。

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

您的listOfGroups将作为WebMatrix.Data.DynamicRecord对象的集合返回。 您似乎只想要int值,因为您在foreach(var groupID in listOfGroups)语句foreach(var groupID in listOfGroups)

尝试替换最后一行:

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

有:

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

这应该从每个动态查询结果的第一个(也是唯一的)列中提取值,该值是您之后的int组ID。

编辑: DynamicRecord查询结果的更正值调用语法。