本帖最后由 林成彬 于 2013-12-20 09:00 编辑
之前一直在学习传智的.NET视频,其中到后面所用到的SQLHelper的泛型方法,实在搞不懂,求指导,代码如下
public static List<T2> ExcuteList<T2>(string strSelectCmd, params SqlParameter[] paras)
{
//1.创建连接通道
using (SqlConnection conn = new SqlConnection(connStr))
{
//2.创建适配器
SqlDataAdapter da = new SqlDataAdapter(strSelectCmd, conn);
//2.1设置查询命令的参数
da.SelectCommand.Parameters.AddRange(paras);
//3.数据表
DataTable dt = new DataTable();
//4.将数据查询并填充到数据表中
da.Fill(dt);
//5.将DataTable转成泛型集合List<T2>
if (dt.Rows.Count > 0)
{
//6.创建泛型集合对象
List<T2> list = new List<T2>();
//7.遍历数据行,将行数据存入 实体对象中,并添加到 泛型集合中list
foreach (DataRow row in dt.Rows)
{
//留言:等学完反射后再讲~~~~!
//7.1先获得泛型的类型(里面包含该类的所有信息---有什么属性啊,有什么方法啊,什么字段啊....................)
Type t = typeof(T2);
//7.2根据类型创建该类型的对象
T2 model = (T2)Activator.CreateInstance(t);// new MODEL.Classes()
//7.3根据类型 获得 该类型的 所有属性定义
PropertyInfo[] properties = t.GetProperties();
//7.4遍历属性数组
foreach (PropertyInfo p in properties)
{
//7.4.1获得属性名,作为列名
string colName = p.Name;
//7.4.2根据列名 获得当前循环行对应列的值
object colValue = row[colName];
//7.4.3将 列值 赋给 model对象的p属性
//model.ID=colValue;
p.SetValue(model, colValue, null);
}
//7.5将装好 了行数据的 实体对象 添加到 泛型集合中 O了!!!
list.Add(model);
}
return list;
}
}
return null;
}
|