4

CSV ファイルを次のクラスに正常にプルしました。

[DelimitedRecord(",")]
[IgnoreFirst(1)] // ignores first line of file, since it's a header
public class Employee {
    public string EmployeeId;
    public string FirstName;
    public string LastName;
    // etc.
}

SqlBulkCopy を使用するには、そのクラスに基づいて DataTable を作成する必要があります。いくつかの例を見つけましたが、次の方法はうまくいきません。

private static DataTable createEmptyDataTable(Type myType) {
        DataTable dt = new DataTable();

        foreach (PropertyInfo info in myType.GetProperties()) {
            dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
        }

        return dt;
    }

問題は myType.GetProperties() にあります。エラーはスローされませんが、何も返されません。返されるはずの PropertyInfo 配列が空です。しばらくやっていて、問題がわかりません...

編集:私はこのバリアントも使用しましたが、成功しませんでした:

private static DataTable createEmptyDataTable(Type myType) {
        DataTable dt = new DataTable();
        PropertyInfo[] infoArray = myType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

        foreach (PropertyInfo info in infoArray) {
            dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
        }

        return dt;
    }
4

3 に答える 3

5

Properties を操作する場合: Get Properties のスコープを指定する必要があります。これを試して、すべてのプロパティ タイプを返します。GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

フィールドを操作する場合 (つまり、get/set を使用しない場合) は、機能が異なるだけで似ています。参照: http://msdn.microsoft.com/en-us/library/ch9714z3.aspx

于 2013-06-05T20:28:33.087 に答える