当前位置:编程学习 > C#/ASP.NET >>

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);  
        }  
    }  
}  

 

 
补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,