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.
}

我需要基于该类创建一个 DataTable 才能使用 SqlBulkCopy。我找到了几个例子,但以下方法对我不起作用:

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

18

您的 Employee 类包含字段,而不是属性。使用宁

myType.GetFields()
于 2013-06-05T20:36:07.690 回答
5

使用属性时:您需要指定获取属性的范围,尝试返回所有属性类型:GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

使用字段(即没有获取/设置)时,它类似,只是功能不同。请参阅:http: //msdn.microsoft.com/en-us/library/ch9714z3.aspx

于 2013-06-05T20:28:33.087 回答
0

您在此类代码段中没有任何属性。我将此代码用于 Web 服务中的 Reference.cs 类。

Employee objE = new Employee();
var members = objE.GetType().GetFields().Select(m => new
{
    Name = m.Name,
    MemType = m.MemberType,
    RtField = m.GetType(),
    Type = m.FieldType,
    MemAtt = m.GetCustomAttributes(true)
});
于 2013-06-05T20:44:03.943 回答