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

DataReader,DataTable利用泛型填充实体类的更多相关文章

  1. 用DataTable填充实体类List

    /// <summary> /// 用DataTable填充实体类List /// </summary> public static List<T> FillLis ...

  2. C# 将DataTable数据源转换成实体类

    using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...

  3. DataTable填充实体类返回泛型集合

    昨天找坤哥看到我的一段代码.例如以下: 略微解释下,这段代码时D层查询结束后,将datatable查询到的结果赋值给实体对象的属性,然后返回实体的过程.坤哥看了之后问我.假设实体有500多个属性.难道 ...

  4. c#自定义ORM框架---(泛型&反射&实体类扩展属性<附带通用增、删、查、改>)

    该教材主要是运用到泛型.反射和实体类扩展属性 步骤一.建立扩展属性类 实体类扩展属性要继承Attribute基类完成 [AttributeUsage(AttributeTargets.Property ...

  5. (转)DataTable与结构不同实体类之间的转换

    原文地址:http://www.cnblogs.com/kinger906/p/3428855.html 在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我 ...

  6. DataTable与结构不同实体类之间的转换

    在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我们怎么处理呢?可能有人会说,在转换时创建一个实体对象,对表里的数据逐行遍历来实例化这个实体对象不就完了.的 ...

  7. 使用hibernate利用实体类生成表和利用表生成实体类

    1,配置数据库,这里以oracle数据库为例.点击右侧Database图标:

  8. [04] 利用注解生成实体类对应的建表sql语句

    1.实现功能 我们已经对注解有了基本的认识,知道了如何自定义注解,如何使用和最基本的处理注解. 本篇主要介绍,如何使用运行时级别的注解,配合反射来自动生成建表的sql语句.如下例: 我们有实体类Stu ...

  9. C#利用反射获取实体类的主键名称或者获取实体类的值

    //获取主键的 PropertyInfo PropertyInfo pkProp = ).FirstOrDefault(); //主键名称 var keyName=pkProp.Name; //实体类 ...

随机推荐

  1. JProtector java应用加密工具

    JProtector    专业的java项目加密工具 JProtector简介: JProtector 专业的java项目加密工具.目前java开发的项目发布的时候需要将项目发布到用户手中,但由于一 ...

  2. android 程序崩溃crash日志的捕捉

    android 程序崩溃crash日志的捕捉 之前在项目开发过程中,一直会遇到程序崩溃了,但是测试組的哥哥们又没及时的导出日志.... 后来在诳群的时候听别人说起,腾讯有那么一个叫bugly的东西 将 ...

  3. cglib源码学习交流

    背景 前段时间在工作中,包括一些代码阅读过程中,spring aop经常性的会看到cglib中的相关内容,包括BeanCopier,BulkBean,Enancher等内容,以前虽大致知道一些内容,原 ...

  4. python测试框架总结

    最流行的有unittest和nose 其他的请看http://wiki.python.org/moin/PythonTes... 中Unit Testing Tools部分 py.test unitt ...

  5. hdu1853解题报告

    题意和解决回路匹配的思路如同hdu3488 (这里我第一次想到最短路,但是对于有回路这个不知道怎么处理,后来看了别人的解题报告才知道KM匹配,但是看到KM之后就自己想...想了很久....还是不知道回 ...

  6. 同步内核缓冲区 sync、fsync和fdatasync函数

    同步内核缓冲区 1.缓冲区简单介绍 人生三大错觉之中的一个:在调用函数write()时,我们觉得该函数一旦返回,数据便已经写到了文件里.可是这样的概念仅仅是宏观上的.实际上.操作系统实现某些文件I/O ...

  7. SDUTOJ 2128 树结构练习——排序二叉树的中序遍历

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUl9NaXNheWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  8. Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题立即涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们怎样影响您的代 ...

  9. [转]CentOS_yum的详细使用方法

    yum 是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题 yum特点可以 ...

  10. Thread.sleep还是TimeUnit.SECONDS.sleep

    转http://stevex.blog.51cto.com/4300375/1285767/ 刚看到TimeUnit.SECONDS.sleep()方法时觉得挺奇怪的,这里怎么也提供sleep方法? ...