111,126
社区成员
发帖
与我相关
我的任务
分享
public static IList<T> FillDataListGeneric<T>(System.Data.SqlClient.SqlDataReader reader) where T : class
{
//实例化一个List<>泛型集合
IList<T> DataList = new List<T>();
while (reader.Read())
{
//由于是是未知的类型,所以必须通过Activator.CreateInstance<T>()方法来依据T的类型动态创建数据实体对象
T RowInstance = Activator.CreateInstance<T>();
//通过反射取得对象所有的Property
foreach (PropertyInfo Property in typeof(T).GetProperties())
{
try
{
//取得当前数据库字段的顺序
if (reader[Property.Name] != DBNull.Value)
{
//将DataReader读取出来的数据填充到对象实体的属性里
Property.SetValue(RowInstance, Convert.ChangeType(reader[Property.Name], Property.PropertyType), null);
}
}
catch
{
break;
}
}
//将数据实体对象add到泛型集合中
DataList.Add(RowInstance);
}
return DataList;
}
protected void Button1_Click(object sender, EventArgs e)
{
string sql = "select * from selectquestions";
IList<DXN.Model.SelectQuestions> lst = FillDataListGeneric<DXN.Model.SelectQuestions>(DXN.DBUtility.DbHelperSQL.ExecuteReader(sql));
}
//这是直接用dbHelperSql访问数据库返回ILIST结果。可以认为是多层里面的 (new Bll.Info()).GetList()方法 T这里假设为DXN.Model.SelectQuestions
string sql = "select * from SelectQuestions ";
IList <DXN.Model.SelectQuestions > lst = DbHelperSQL.ExecuteReader(sql);
if (!reader[Property.Name].GetType().equal(Property.PropertyType))
{
Property.SetValue(RowInstance, Convert.ChangeType(reader[Property.Name], Property.PropertyType), null);
}else
{
Property.SetValue(RowInstance, reader[Property.Name], null);
}