首页 / 网页编程 / ASP.NET / 快速构建一个简单的个人框架系列(3)--FastObject具体实现编码
        
            快速构建一个简单的个人框架系列(3)--FastObject具体实现编码2011-09-15 博客园 谦虚的天下前面说了那么多的不具体的想法和设计,今天我们就一个一个来实现它!让我们一起来面对一个一个问题吧!1.底层分别使用的是什么操作access数据库和sqlserver数据库的?这个问题本是一个很麻烦的问题,我采用的是SqlHelper和AccessHelper,我也已经忘记了当初是从那 里下,在这里感谢原作者和汉化者。2.你是如何把SqlDataReader和OleDbDataReader转换为T对象并自动赋值?对于一个未知的实体类,想要向它的属性赋值,我用的是反射。DbDataReader(使用父类能向下兼容)转换为Object的关键代码:for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty (reader.GetName(i));//获取属性
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);//属性赋值
                    }
                }考虑到具体情况,具体代码://处理转化reader到object的类,方便随后转化为T
class ReaderHelper
    {
        public static object ReaderToObject(DbDataReader reader, object obj) 
        {
            //针对CommonObject特别处理
            Type t = obj.GetType();
            if (t.Equals((new CommonObject()).GetType()))
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty("Co"+ (i+1).ToString());
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);
                    }
                }
            }
            else
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty (reader.GetName(i));
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);
                    }
                }
            }
            return obj;
        }
    }注意:不可回避的是,这里面是有限制的,也可以算是一个bug吧!需要改进!