类中的字段类型需要和数据库的字段类型匹配,大小写无关. 类中自定义的字段(数据库没有)将无法从datatable中取值
以下是源代码:

Code

/**//// <SUMMARY>
/// 依据反射机制将DataTable中指定行数据赋给obj
/// </SUMMARY>
/// <PARAM name="obj" />要实例的对象
/// <PARAM name="dataTable" />DataTable
/// <PARAM name="row" />要读取DataTable行的序号
public static void InstanDataTableToBean(Object obj, DataTable dataTable, int row)

{
//指定行不存在
if (dataTable.Rows.Count < (row + 1))

{
throw new Exception("指定行不存在!");
}

//DataTable列为空!
if (dataTable.Columns.Count < 1)

{
throw new Exception("DataTable列为空!");
}


Type type = obj.GetType(); //获取对象类型
PropertyInfo[] pInfos = type.GetProperties();
try

{
for (int i = 0; i < dataTable.Columns.Count; i++) //循环所有列

{
for (int j = 0; j < pInfos.Length; j++) //循环所有属性

{
//比较的作用是防止数据库列名的大小写和属性的大小写不一致
if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower())

{
PropertyInfo pInfo = type.GetProperty(pInfos[j].Name); //反射机制,动态检索类属性

object colValue = dataTable.Rows[row][i];
//不同的基本数据类型,比如用Convert方法转换成对应类型的值
if (!Convert.IsDBNull(colValue) && colValue.ToString() != null) //如果数据集中此列有值

{
if (pInfos[j].PropertyType.FullName == "System.String")

{
pInfo.SetValue(obj, Convert.ToString(colValue), null);
}
else if (pInfos[j].PropertyType.FullName == "System.Int32")

{
pInfo.SetValue(obj, Convert.ToInt32(colValue), null);
}
else if (pInfos[j].PropertyType.FullName == "System.Int64")

{
pInfo.SetValue(obj, Convert.ToInt64(colValue), null);
}
else if (pInfos[j].PropertyType.FullName == "System.Single")

{
pInfo.SetValue(obj, Convert.ToSingle(colValue), null);
}
else if (pInfos[j].PropertyType.FullName =="System.Double")

{
pInfo.SetValue(obj, Convert.ToDouble(colValue), null);
}
else if (pInfos[j].PropertyType.FullName =="System.Decimal")

{
pInfo.SetValue(obj, Convert.ToDecimal(colValue), null);
}
else if (pInfos[j].PropertyType.FullName =="System.Char")

{
pInfo.SetValue(obj, Convert.ToChar(colValue), null);
}
else if (pInfos[j].PropertyType.FullName == "System.DateTime")

{
pInfo.SetValue(obj, Convert.ToDateTime(colValue), null);
}
else

{
throw new Exception("不支持的属性基本类型!");
}
}
else

{
pInfo.SetValue(obj, null, null); //如果数据集中此列没有值
}

break;
}
}
}
}
catch (Exception ex)

{ //不捕获异常,异常抛出由开发人员处理
throw ex;
}
}