Fastmember 异常:指定的参数超出了有效值的范围。参数名称:名称

use*_*073 6 sqlbulkcopy outofrangeexception fastmember

我遇到了这个错误 指定的参数超出了有效值的范围。参数名称:名称

当我几乎只是复制这里的示例时https://code.google.com/p/fast-member/

错误发生在 bcp.WriteToServer(reader) 上,一直在寻找其他信息,但我仍然不知道是什么导致了问题,并且示例非常简单...而且我什至不知道名为name的参数来自哪里。

我的实际代码如下

        using (var bcp = new SqlBulkCopy(configvalue1))
        using (var reader = ObjectReader.Create(DataToLoad, new string[]{"id","field1","field2","field3"}))
        {
            bcp.DestinationTableName = string.Format(DestinationTableFormat, DestinationDb, DestinationSchema, DestinationTable);
            bcp.BatchSize = BatchSize ?? 10000;
            bcp.WriteToServer(reader);
            bcp.Close();
        }
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

提前致谢

use*_*073 2

我相信我现在知道为什么会发生这种情况。

这是一个实际有效的示例,它使用一个具体类作为其 POCO,并创建该 POCO 的通用列表,如下所示。

        IList<MyClass> ls = new List<MyClass>();
        ls.Add(new MyClass { MyColumn1 = "The", MyColumn2 = "Test2" });
        ls.Add(new MyClass { MyColumn1 = "Big", MyColumn2 = "Test2" });
        ls.Add(new MyClass { MyColumn1 = "Ant", MyColumn2 = "Test2" });
        DataTable dt = new DataTable();
        using (var reader = ObjectReader.Create(ls))
        {
            dt.Load(reader);
        }
Run Code Online (Sandbox Code Playgroud)

这更像是您实时分配属性的匿名对象列表。

        IList<object> ls2 = new List<object>();
        ls2.Add(new { MyColumn1 = "The", MyColumn2="Test2" });
        ls2.Add(new { MyColumn1 = "Big", MyColumn2="Test2" });
        ls2.Add(new { MyColumn1 = "Ant", MyColumn2="Test2" });
        DataTable dt2 = new DataTable();
        using (var reader2 = ObjectReader.Create(ls2))
        {
            dt2.Load(reader2);
        }
Run Code Online (Sandbox Code Playgroud)

这也不起作用

        IList<dynamic> ls3 = new List<dynamic>();
        ls3.Add(new { MyColumn1 = "The", MyColumn2 = "Test2" });
        ls3.Add(new { MyColumn1 = "Big", MyColumn2 = "Test2" });
        ls3.Add(new { MyColumn1 = "Ant", MyColumn2 = "Test2" });
        DataTable dt3 = new DataTable();
        using (var reader3 = ObjectReader.Create(ls3))
        {
            dt3.Load(reader3);
        }
Run Code Online (Sandbox Code Playgroud)

即使 3 个列表在功能上相同,一个是 POCO 列表,一个是匿名对象列表,一个是动态成员列表,FASTMEMBER 无法在运行时正确读取 List 内匿名/动态对象的属性时间(例如:看不到 MyColumn1 和 MyColumn2),即使它在那里。

所以这更多的是一个限制