zoukankan      html  css  js  c++  java
  • C#将SqlDataReader转换成泛型类

            public static T DataReaderToEntity<T>(IDataReader dr, T entity)
            {
                try
                {
                    PropertyInfo[] pilist = entity.GetType().GetProperties();
                    foreach (PropertyInfo pi in pilist)
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            if (pi.Name.Equals(dr.GetName(i)))
                            {
                                pi.SetValue(entity, Convert.ChangeType(dr[i], pi.PropertyType), null);
                            }
                        }
                    }
                    return entity;
                }
                catch
                {
                    return default(T);
                }
            }

    上面的方法利用反射读取SqlDataReader对应值。红色部分转换为相应的类型

    有时候会有一些特殊情况,比如Guid和string之间的转换可能会报错,object must implement IConvertible

    那么需要加入前置判断

                                if (!dr[i].GetType().IsPrimitive)
                                {string me = dr[i].ToString();
                                        pi.SetValue(entity, me, null);                                
                                }

    因为直接使用Convert.ChangeType会报错

    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    EveryOne Piano
    3D扫描商店
    Substance PBR Guide
    C2GOASM
    Unity调试外部DLL
    BinaryReader优化
    IL
    如何画头发
    Bitrix24
    Mac查找包含指定字符串的文件
  • 原文地址:https://www.cnblogs.com/AduBlog/p/15076289.html
Copyright © 2011-2022 走看看