当前位置:编程学习 > C#/ASP.NET >>

将数据通过反射写入实体类的问题


/// <summary>
        /// 将取出的数据写入实体类
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cmdText"></param>
        public void GetModel(object model, string cmdText)
        {
            PropertyInfo propertyInfo;
            DbDataReader dr = ExecuteDataReader(conn, cmdText);
            while (dr.Read())
            {
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    propertyInfo = model.GetType().GetProperty(dr.GetName(i));
                    if (propertyInfo != null)
                    {
                        if (dr.GetValue(i) != DBNull.Value)
                        {
                            propertyInfo.SetValue(model, dr.GetValue(i), null);
                        }
                    }
                }
            }
            dr.Close();
            conn.Close();
        }

如上代码 当连接是SQL SERVER数据库时,没有问题,连接到ORACLE数据库时,dr里面也有数据了,但是propertyInfo却为null,难道反射代码不能操作oracle数据库?请教了... --------------------编程问答-------------------- 你碰到鬼了吧,反射是基础类库,跟数据库风马牛不相及

//只要dr.GetValue(i)有值,并且model是引用类型,就可以
  propertyInfo.SetValue(model, dr.GetValue(i), null);


--------------------编程问答-------------------- 你这贴出来的是数据库的代码啊!和那个没的什么关系的哦!天啦! --------------------编程问答-------------------- 就是嘛  真是见鬼了 --------------------编程问答-------------------- UP --------------------编程问答-------------------- 与数据库没关系,操作oracle数据库,是否获取到值。跟踪看看
ExecuteDataReader方法是否支持
--------------------编程问答-------------------- dr
主要看这个的了 --------------------编程问答-------------------- 是的 是dr读出的字段名的问题,实体的属性区分大小写,比如select UserName,UserAge from users
propertyInfo = model.GetType().GetProperty(dr.GetName(i));
dr.GetName(i)就是UserName,UserAge 与实体属性对应是一致的,但是把连接串改成ORACLE,调试时发现
dr.GetName(i)成了 USERNAME,USERAGE 觉得很奇怪,就与实体属性不对应了 所以。。。 oracle里SQL语句对于字符区分大些小,SQLSERVER里的SQL 语句不区分
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,