• DataReader,DataTable利用泛型填充实体类


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    ///TestTableModel 的摘要说明
    /// </summary>
    public class TestTableModel
    {
        public int D_Id { get; set; }
        public string D_Name { get; set; }
        public string D_Password { get; set; }
        public string D_Else { get; set; }
        public decimal D_Amount { get; set; }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data;
    using System.Reflection;
    
    namespace MSCL
    {
        /// <summary>
        ///ObjectToList 的摘要说明
        /// </summary>
        public static class ObjectToList
        {
            /*  --示例
                IDataReader dr = MSCL.SqlHelper.GetSqlDataReader("select * from TestTable where d_id in(6,7,8)");
                List<TestTableModel> t1 = MSCL.ObjectToList.DataReaderToList<TestTableModel>(dr);
                for (int i = 0; i < t1.Count; i++)
                {
                    Response.Write(t1[i].D_Id + "<br/>");
                    Response.Write(t1[i].D_Name + "<br/>");
                    Response.Write(t1[i].D_Password + "<br/>");
                    Response.Write(t1[i].D_Else + "<br/>");
                    Response.Write(t1[i].D_Amount + "<br/>");
                }   
                dr.Dispose();
                dr.Close();
             */
    
            /// <summary>
            /// DataReader利用泛型填充实体类
            /// </summary>
            /// <typeparam name="T">实体类</typeparam>
            /// <param name="reader">DataReader</param>
            /// <returns></returns>
            public static List<T> DataReaderToList<T>(IDataReader reader)
            {
                //实例化一个List<>泛型集合
                List<T> DataList = new List<T>();
                while (reader.Read())
                {
                    T RowInstance = Activator.CreateInstance<T>();//动态创建数据实体对象
                    //通过反射取得对象所有的Property
                    foreach (PropertyInfo Property in typeof(T).GetProperties())
                    {
                        try
                        {
                            //取得当前数据库字段的顺序
                            int Ordinal = reader.GetOrdinal(Property.Name);
                            if (reader.GetValue(Ordinal) != DBNull.Value)
                            {
                                //将DataReader读取出来的数据填充到对象实体的属性里
                                Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
                            }
                        }
                        catch
                        {
                            break;
                        }
                    }
                    DataList.Add(RowInstance);
                }
                return DataList;
            }
    
            /// <summary>
            /// DataTable利用泛型填充实体类
            /// </summary>
            /// <typeparam name="T">实体类</typeparam>
            /// <param name="dt">DataTable</param>
            /// <returns></returns>
            public static List<T> DataTableToList<T>(DataTable dt) where T : new()
            {
                var list = new List<T>();
                if (dt == null) return list;
                var len = dt.Rows.Count;
    
                for (var i = 0; i < len; i++)
                {
                    var info = new T();
                    foreach (DataColumn dc in dt.Rows[i].Table.Columns)
                    {
                        var field = dc.ColumnName;
                        var value = dt.Rows[i][field].ToString();
                        if (string.IsNullOrEmpty(value)) continue;
                        if (IsDate(value))
                        {
                            value = DateTime.Parse(value).ToString();
                        }
    
                        var p = info.GetType().GetProperty(field);
    
                        try
                        {
                            if (p.PropertyType == typeof(string))
                            {
                                p.SetValue(info, value, null);
                            }
                            else if (p.PropertyType == typeof(int))
                            {
                                p.SetValue(info, int.Parse(value), null);
                            }
                            else if (p.PropertyType == typeof(bool))
                            {
                                p.SetValue(info, bool.Parse(value), null);
                            }
                            else if (p.PropertyType == typeof(DateTime))
                            {
                                p.SetValue(info, DateTime.Parse(value), null);
                            }
                            else if (p.PropertyType == typeof(float))
                            {
                                p.SetValue(info, float.Parse(value), null);
                            }
                            else if (p.PropertyType == typeof(double))
                            {
                                p.SetValue(info, double.Parse(value), null);
                            }
                            else
                            {
                                p.SetValue(info, value, null);
                            }
                        }
                        catch (Exception)
                        {
                            //p.SetValue(info, ex.Message, null); 
                        }
                    }
                    list.Add(info);
                }
                dt.Dispose(); dt = null;
                return list;
            }
    
            /// <summary>
            /// 是否是时间
            /// </summary>
            /// <param name="d"></param>
            /// <returns></returns>
            private static bool IsDate(string d)
            {
                DateTime d1;
                double d2;
                return !double.TryParse(d, out d2) && DateTime.TryParse(d, out d1);
            }
        }
    }

  • 相关阅读:
    diffstat命令
    v-if与v-show的区别
    常数时间插入、删除和获取随机元素
    diff命令
    C++ bitset的简单使用
    树的直径 | 简答的两道模板题
    Codeforces Round #544 (Div. 3)简单题解
    VIM 入门手册, (VS Code)
    PTA 天梯赛 L3-003 社交集群(并查集)
    L3-002 特殊堆栈 (双数组模拟栈)
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234256.html
Copyright © 2020-2023  润新知