【问题标题】:No mapping exists from object type WebMatrix.Data.DynamicRecord to a known managed provider native type不存在从对象类型 WebMatrix.Data.DynamicRecord 到已知托管提供程序本机类型的映射
【发布时间】:2012-03-12 10:05:08
【问题描述】:

我对我的 SQL 服务器返回的错误感到非常困惑 - 是什么原因造成的?

我正在运行的 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;
}

还有错误:

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

这可能是什么原因造成的,我该如何解决?

我想要做的是返回所有 recurring = 0 的事件,以及 recurring =1 的任何事件,我希望在他们的一周和之后的 52 周内返回。

【问题讨论】:

    标签: c# sql sql-server compiler-errors


    【解决方案1】:

    您的问题似乎与您的 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) 语句中获得了 groupID

    尝试替换最后一行:

    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 查询结果的值调用语法。

    【讨论】:

    • 非常感谢您的回复,但是此代码实际上返回错误:“无效的列名“项目”。
    • 对不起,我对 WebMatrix 很陌生。我更正了语法——您可以直接调用 GroupID 作为动态查询结果中的属性。
    • 另外,作为建议,您可能希望将 foreach 中声明的本地参数中的 groupID 重命名为 row 等,以阐明每个对象都是动态查询的结果,而不是实际上直接是 ID 本身。
    • 非常感谢您提供此代码。这已经修复了我的错误,但是 SQL 查询仍然返回错误的值!我在这里发布了另一个问题,希望能找到答案:stackoverflow.com/questions/9674005/… 非常感谢您的帮助!
    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多