4

このエラーが発生しました 指定された引数は有効な値の範囲外でした. パラメータ名: 名前

ここの例をほとんどコピーするだけのときhttps://code.google.com/p/fast-member/

エラーは bcp.WriteToServer(reader) で発生し、追加情報を探していましたが、問題の原因はまだわかりません。例はとても単純です...そして、名前という名前のパラメーターがどこから来ているのかさえわかりません。

私の実際のコードは以下です

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

誰か助けてくれませんか?

前もって感謝します

4

4 に答える 4

2

私にとって、これは、ソース データ オブジェクトのプロパティ名とリーダー作成ステップのパラメーター リストの不一致が原因でした。

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"))

Supplier オブジェクトの「コード」および「名前」プロパティを再ケース化する Re-sharper を使用していたため、リーダーがプロパティにマップできませんでした。改訂されたケースにプロパティを残し、2 行目に示されているように、一致するようにリーダー パラメーター リストを修正しました。

于 2017-02-02T12:07:02.597 に答える
1

なぜこれが起こっているのかがわかったと思います。

これは実際に機能する例です。これは具体的なクラスを 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 つのリストは機能的には同じですが、1 つは POCO のリスト、1 つは匿名オブジェクトのリスト、もう 1 つは動的メンバーのリストですが、FASTMEMBER は実行時に List 内の匿名/動的オブジェクトのプロパティを適切に読み取ることができません。時間 (例: MyColumn1 と MyColumn2 が見えない) があっても。

したがって、これはより多くの制限です

于 2015-03-13T18:25:22.860 に答える