http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3322|回复: 2

[C#语言基础] 自己写的反射帮助类.自动将数据库结果集反射成泛型集合

[复制链接]
发表于 2013-6-25 16:33:57 | 显示全部楼层 |阅读模式
由于每次数据库操作 返回的 数据库结果集 如:DataSet、DataTableReader、SqlDataReader 都有非常繁琐的 取值操作
例如:
[code=csharp]while (this.dr.Read())
   {
    string Name = this.dr["Name"].ToString();//医院名称
    string Address = this.dr["Address"].ToString();//地址
    string Features = this.dr["Features"].ToString();//特色项目
    string Details = this.dr["Details"].ToString();//医院描述
    string Favorable = this.dr["Favorable"].ToString();//折扣
    string SmallImg = this.dr["SmallImg"].ToString();//医院小图片

}[/code]

所以写了一个反射帮助类,来解决这些繁琐的取值操做 (ps:结果有对象的实体对象)

部分代码如下:

  [code=csharp]#region ************* 反射:将DataSet反射成泛型集合 *************
  /// <summary>
  /// 将DataSet反射成泛型集合
  /// </summary>
  /// <typeparam name="T">实体对象</typeparam>
  /// <param name="ds">DataSet</param>
  /// <returns></returns>
  public List<T> getModelArrary<T>(DataSet ds) where T : new()
  {
   if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
   {
    return null;
   }
   T t = new T();
   List<T> list = new List<T>();
   PropertyInfo[] properties = t.GetType().GetProperties();
   for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
   {
    T model = new T();
    foreach (var propertyInfo in properties)
    {
     string name = propertyInfo.Name;
     if (ds.Tables[0].Rows[name] != null && ds.Tables[0].Rows[name].ToString() != "")
     {
      string value = ds.Tables[0].Rows[name].ToString();
      SetModelValue(name, value, model);
     }
    }
    list.Add(model);
   }
   ds.Dispose();
   return list;
  }
  #endregion ************* 反射:将DataSet反射成泛型集合 *************



  #region ************* 反射:将SqlDataReader反射成泛型集合 *************
  /// <summary>
  /// 将SqlDataReader反射成泛型集合
  /// </summary>
  /// <typeparam name="T">实体对象</typeparam>
  /// <param name="ds">SqlDataReader</param>
  /// <returns></returns>
  public List<T> getModelArrary<T>(SqlDataReader dr) where T : new()
  {
   if (dr == null || dr.HasRows == false)
   {
    return null;
   }
   T t = new T();
   List<T> list = new List<T>();
   PropertyInfo[] properties = t.GetType().GetProperties();
   while (dr.Read())
   {
    T model = new T();
    foreach (var propertyInfo in properties)
    {
     string name = propertyInfo.Name;
     if (dr[name] != null && dr[name].ToString() != "")
     {
      string value = dr[name].ToString();
      SetModelValue(name, value, model);
     }
    }
    list.Add(model);
   }
   dr.Dispose();
   return list;
  }
  #endregion ************* 反射:将SqlDataReader反射成泛型集合 *************
  #region ************* 反射:将DataTableReader反射成泛型集合 *************
  /// <summary>
  /// 将DataTableReader反射成泛型集合
  /// </summary>
  /// <typeparam name="T">实体对象</typeparam>
  /// <param name="ds">DataTableReader</param>
  /// <returns></returns>
  public List<T> getModelArrary<T>(DataTableReader dtr) where T : new()
  {
   if (dtr == null || dtr.HasRows == false)
   {
    return null;
   }
   T t = new T();
   List<T> list = new List<T>();
   PropertyInfo[] properties = t.GetType().GetProperties();
   while (dtr.Read())
   {
    T model = new T();
    foreach (var propertyInfo in properties)
    {
     string name = propertyInfo.Name;
     if (dtr[name] != null && dtr[name].ToString() != "")
     {
      string value = dtr[name].ToString();
      SetModelValue(name, value, model);
     }
    }
    list.Add(model);
   }
   dtr.Dispose();
   return list;
   
  }
  #endregion ************* 反射:将DataTableReader反射成泛型集合 *************[/code]


全部源码在附件中

MyReflection.rar

1.49 KB, 下载次数: 208, 下载积分: 金钱 -1

MyReflection.cs



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-25 16:39:56 | 显示全部楼层
我帮你用上了代码控件,建议以后也用用好看一些http://www.sufeinet.com/thread-1942-1-1.html
发表于 2013-6-25 19:28:27 | 显示全部楼层
受教了,学习中……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-17 19:04

© 2014-2021

快速回复 返回顶部 返回列表