2015-03-13 81 views
2

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

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

在bcp.WriteToServer(阅读器)发生错误,一直在寻找更多的信息,但我仍然不知道是什么原因造成的问题而这个例子是如此简单...我甚至不知道名称名称是从哪里来的。

我的实际代码如下

 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(); 
     } 

有人能帮忙吗?

在此先感谢

回答

0

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

这是一个实际工作的例子,这个例子使用一个具体的类作为它的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); 
     } 

这是一个更多的实时分配属性的匿名对象列表。

 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); 
     } 

这并不工作,以及

 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); 
     } 

即使3所列出的功能相同,一个POCO,一个匿名对象的列表,一个动态成员的名单列表, FASTMEMBER无法在运行时正确读取List内匿名/动态对象的属性(例如:CANT参见MyColumn1和MyColumn2),即使它存在。

所以这更多的是一种限制

0

对我来说,这是通过对源数据对象和读者创建步骤参数列表中的属性名称之间的不匹配造成的。

class Supplier 
{ 
    public string Code; 
    public string Name; 
} 

// version that caused the error 
using (var rdr = ObjectReader.Create(suppliers, "code", "name")) 

// compared to re-cased version to match the Supplier object property casing 
using (var rdr = ObjectReader.Create(suppliers, "Code", "Name")) 

我用了再尖锐其重新情况下,“代码”和“名”的属性在供应对象,这意味着读者无法映射到属性。我在修改后的案例中留下了这些属性,并修改了读者参数列表以匹配,如第二行所示。

相关问题