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会报错

posted @ 2021-07-29 17:41  RookieCoderAdu  阅读(208)  评论(0编辑  收藏  举报