zoukankan      html  css  js  c++  java
  • 反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)

    图片有点大哈,但大更能说明问题。您是不是每个项目都在重复的做图片中的事情-----循环把数据库中返回的表转化为实体对象。是不是每次都在抱怨这样的重复工作。字段越多抱怨越多!不用抱怨了。当你看到这篇文章的时候您的春天就到了,我们可以写一个通用的读取类来为我们转化。

    代码实现

            static List<T> ConvertDataTalbeToObject<T>(DataTable dt)

            {

                List<T> lt = new List<T>();

     

                if (dt == null)

                    return lt;

     

                Assembly ass = Assembly.LoadFile(Path.GetFullPath("通用转对象.exe"));//加载程序集

                Type type = typeof(T);//获取类型

                foreach (DataRow dr in dt.Rows)

                {

                    object o = ass.CreateInstance(type.ToString());//实例化一个实例

                    PropertyInfo[] propertyInfo = type.GetProperties();//获取该类的所有属性

                    foreach (PropertyInfo p in propertyInfo)

                    {

                        if (p.PropertyType.Name == "Int32")

                            p.SetValue(o, (dr[p.Name] != null)?(Convert.ToInt32(dr[p.Name])):(Int32.MinValue));

                        else if (p.PropertyType.Name == "Guid")

                            p.SetValue(o, new Guid( dr[p.Name].ToString()));

                        else if (p.PropertyType.Name == "Boolean")

                            p.SetValue(o, Convert.ToBoolean(dr[p.Name].ToString()));

                        else

                            p.SetValue(o, dr[p.Name].ToString());

                    }

                    lt.Add((T)o);

                }

                return lt;

            }

    有什么错误的地方和不足之处希望大家指出,您的宝贵意见是我写下去的动力!

  • 相关阅读:
    Java中equals方法和==的区别
    android 使用colors.xml设置颜色
    20199103《网络攻防实践》假期作业
    20199103 201920202《网络攻防实践》第一周作业
    20199103 201920202 《网络攻防实践》第二周作业
    [整理]如何做一个语法着色控件
    [原创]Thunderbird签名中含有图片发送失败的问题
    [原创]Linux下的Subversion安装与配置
    [原创]使用Selenium2测试含有iframe的Ajax网页
    [原创]打造完整的OracleDB学习环境 系统安装篇
  • 原文地址:https://www.cnblogs.com/gaojiangshan/p/3433794.html
Copyright © 2011-2022 走看看