zoukankan      html  css  js  c++  java
  • DataReader反射泛型对象

          昨天听同学说,要把DataReader对象转成实体对象,要写一个通用的方法。想了下用反射应该可以做到。项目中一般都是用第三方组件来做数据访问层,如,Nhibernate、ef等。于是自己想写个简单例子玩玩。

          其实,实现起来和简单。一个泛型方法搞定。代码如下:

     1     public List<T> ToList<T>(string _sql) where T :class ,new()
     2         {
     3             
     4             using (var conn = new SqlConnection(connStr))
     5             {
     6                 using (var comm = new SqlCommand(_sql, conn))
     7                 {
     8                     conn.Open();
     9                     SqlDataReader dataReader = comm.ExecuteReader();
    10                     if (dataReader.HasRows)
    11                     {
    12                         List<T> dataList = new List<T>();
    13                         
    14                         while ((dataReader.Read()))
    15                         {
    16                             T obj = new T();
    17                             //获取泛型对象的所有属性
    18                             var properties = obj.GetType().GetProperties();
    19                             foreach (var property in properties)
    20                             {
    21                                 for (int i = 0; i < dataReader.FieldCount; i++)
    22                                 {
    23                                     //查找与属性名称相同的列
    24                                     if (dataReader.GetName(i).Equals(property.Name,StringComparison.CurrentCultureIgnoreCase))
    25                                     {
    26                                         //给新建的obj对象的属性赋值
    27                                         property.SetValue(obj,dataReader[i]);
    28                                     }
    29                                 }
    30                             }
    31                             dataList.Add(obj);
    32                         }
    33                         conn.Close();
    34                         return dataList;
    35                     }
    36                   
    37                 }
    38             }
    39             return null;
    40         }
    View Code


         

          完整代码链接:http://download.csdn.net/detail/ybealq/7767735

  • 相关阅读:
    python RabbitMQ gRPC 实践经验
    python 数据库实践经验
    python GUI相关
    angularjs中的$watch、$digest、$apply
    css选择器优先级
    angularjs基本理解
    如何编写符合web标准的XHTML文档
    跨域问题
    如何养成良好的书写代码习惯
    ie常见兼容问题
  • 原文地址:https://www.cnblogs.com/7579/p/3916661.html
Copyright © 2011-2022 走看看