我已成功将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;
}
答案 0 :(得分:18)
您的Employee类包含字段,而不是属性。请使用
myType.GetFields()
答案 1 :(得分:5)
使用“属性”时:
您需要指定获取属性的范围,尝试此操作以返回所有属性类型:GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
使用字段(即没有get / set)时,它的功能相似,只是一个不同的功能。见: http://msdn.microsoft.com/en-us/library/ch9714z3.aspx
答案 2 :(得分: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)
});