这里的类是包含所有DataTable列为字段的类,比如DataTable有列a,b,c,那麽类中就有a,b,c三个字段,另外还可以自定义字段。
以下是源代码:
///
/// 依据反射机制实例化一个对象
///
/// 要实例的对象
/// 值[DataTable对象]
/// 要读取DataTable行的序号
/// 返回被实例的对象
public static Object InstantiationBean(Object obj, DataTable dataTable, int row)
{
DataColumnCollection dtcolColl = dataTable.Columns; //数据结果集列总数
DataRowCollection dtrowColl = dataTable.Rows; //数据结果集行总数
//如果数据为空
if (dtrowColl.Count == 0)
{
return null;
}
DataRow dataRow = dtrowColl[row]; //取出第row行数据
Type type = obj.GetType(); //建立反射
try
{
int count = dtcolColl.Count;
for (int i = 0; i < count; i++) //循环数据结果集列名
{
String colName = dtcolColl[i].ColumnName; //取出数据结果集列名
PropertyInfo pInfo = type.GetProperty(colName); //反射机制,动态检索类属性
if (pInfo != null) //如果在类中找到对应的属性值,则将其实例到对象中
{
Object objColName = dataRow[colName];
if (!Convert.IsDBNull(objColName) && objColName.ToString() != null) //如果数据集中此列有值
{
pInfo.SetValue(obj, Convert.ToString(objColName), null);
}
else
{
pInfo.SetValue(obj, null, null); //如果数据集中此列没有值
}
}
}
}
catch (Exception ex)
{ //不捕获异常,异常抛出由开发人员处理
throw ex;
}
return obj;
}
本文介绍了一种通过反射机制将DataTable中的数据实例化为自定义类对象的方法。该方法能够根据DataTable的列名动态地为类中的相应属性赋值,支持处理空值,并通过异常处理确保过程的健壮性。
606

被折叠的 条评论
为什么被折叠?



