首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net反射 泛型 怎么获取SqlDataReader 中的值填充

2012-04-15 
asp.net反射 泛型如何获取SqlDataReader 中的值填充C# codeconnText select * from + tableName +

asp.net反射 泛型 如何获取SqlDataReader 中的值填充

C# code
connText = "select * from " + tableName + " where " + f;                SqlDataReader datar = SQLServer.SQLServer.getList(connText, parms);                IList<T> listT = new List<T>();                                while (datar.Read())                {                    T tmodel = new T();                    int k=0;                    foreach (PropertyInfo pro in pros)                    {                        pro.SetValue(listT, datar.GetSqlValue(k), null);                        k++;                    }                    listT.Add(tmodel);                }

我在运行时下面出现错误,想问一下 在我不确定数据库某列值的类型的时候,该怎么在SqlDataReader中获取值呢

对象与目标类型不匹配。 

异常详细信息: System.Reflection.TargetException: 对象与目标类型不匹配。

源错误: 


行 141: foreach (PropertyInfo pro in pros)
行 142: {
行 143: pro.SetValue(listT, datar.GetSqlValue(k), null);行 144: k++;
行 145: }
 


[解决办法]
pro.SetValue(listT, datar.GetSqlValue(k), null);
listt这个不对吧,应该是listT的某一行和列吧?
[解决办法]
看不出来使用反射的必要。
[解决办法]
反射进行赋值不实用的。

要求model 和字段的顺序一致。不然就报告楼主的哪种错误。幸亏报告类型错误,如果是同类型的话赋值错位你都不知道。
[解决办法]
探讨
看不出来使用反射的必要。

[解决办法]
C# code
public static IList<T> ToList<T>(SqlDataReader dr) where T:new(){    List<T> list = new List<T>();    var properties = TypeDescriptor.GetProperties(typeof(T));    var fields = Enumerable.Range(0, dr.FieldCount-1).Select(i=> dr.GetName(i)).Where(name => properties[name] != null);    while (dr.Read())    {        T o = new T();        fields.ToList().ForEach(field => { properties[field].SetValue(o, dr[field] == DBNull.Value ? null : dr[field]); });        list.Add(o);    }    return list;} 

热点排行