• 【2016-11-2】【坚持学习】【Day17】【通过反射自动将datareader转为实体info】


    通过ADO.net 查询到数据库的数据后,通过DataReader转为对象Info

     public class BaseInfo
        {
            /// <summary>
            /// 填充实体
            /// </summary>
            /// <param name="dr"></param>
            public virtual void Fill(DataRow dr)
            {
                PropertyInfo[] ps = this.GetType().GetProperties();
    
                foreach (PropertyInfo pinfo in ps)
                {
                    if (dr.Table.Columns.Contains(pinfo.Name))
                    {
                        pinfo.SetValue(this, dr[pinfo.Name], null);
                    }
                }
            }
            /// <summary>
            /// 填充实体
            /// </summary>
            /// <param name="dr"></param>
            public virtual void Fill(DbDataReader dr)
            {
                PropertyInfo[] ps = this.GetType().GetProperties();
    
                foreach (PropertyInfo pinfo in ps)
                {
                    int colIndex = dr.GetOrdinal(pinfo.Name);
                    if (colIndex >= 0 && !dr.IsDBNull(colIndex))
                    {
                        pinfo.SetValue(this, dr[pinfo.Name], null);
                    }
                }
            }
        }
    基类BaseInfo
     public class BeaconDataInfo:BaseInfo
        {
            public string SeqNO { get; set; }
            public string CBID { get; set; }
            public string Time{ get; set; }
            public string DeviceName{ get; set; }
            public string FirmwareType{ get; set; }
            public string FirmwareVersion{ get; set; }
            public string LightIntensity{ get; set; }
            public string Major{ get; set; }
            public DateTime CreateTime { get; set; }
    
            public override void Fill(System.Data.Common.DbDataReader dr)
            {
                base.Fill(dr);
            }
        }
    对象实体类
     public List<BeaconReceiveInfo> Select()
            {
                string sql = "select * from BeaconReceive order by CreateTime desc limit 100 offset 0";
    
                using (DbDataReader dr = SqliteHelper.ExecuteReader(sql, SqliteHelper.ConnStr, null, System.Data.CommandType.Text))
                {
                    List<BeaconReceiveInfo> lst = new List<BeaconReceiveInfo>();
                    while (dr.Read())
                    {
                        BeaconReceiveInfo info = new BeaconReceiveInfo();
                        info.Fill(dr);
                        lst.Add(info);
                    }
                    return lst;
                }
            }
    业务查询方法

    作者:zscmj
    出处:http://www.cnblogs.com/zscmj/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    android studio学习----Android Studio导入github下载的工程--替换方法
    python+selenium 发送邮件
    vue 操作列的自定义
    vue作用域插槽实践
    vue左侧菜单的实现
    Django 解决跨域
    关于 with 语句
    docker
    python连接 ssh
    数据库建表 外键
  • 原文地址:https://www.cnblogs.com/zscmj/p/6024828.html
Copyright © 2020-2023  润新知