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>();//动态创建数据实体对象//通过反射取得对象所有的Propertyforeach (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. C#利用反射将Datatable转化为指定实体类ListT

    背景介绍 在软件开发中肯定免不了和数据库打交道,我们对数据的增删改查最终会转化为SQL在数据库中执行.从SQLServer中查出数据一般有两种方式:一是ADO.NET直接写SQL语句从数据中查出数据, ...

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

    1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Reflection; ...

  3. C#利用反射将实体类ListT转化为Datatable

    背景介绍 C#中实体类的操作十分简便,一般情况下不需要涉及ADO.NET,如果需要将实体类转化为Datatable,这个时候就需要手动写一个方法了,代码如下图所示: public static cla ...

  4. 利用dom4j将实体类转换为对应的xml报文

    利用dom4j生成xml报文 目标格式: <?xml version="1.0" encoding="GBK"?><Packet type=& ...

  5. 泛型 与 实体类的相互转换

    问题: 当我强制转换实体类型到泛型的,或者将泛型强制转换为实体类型,会提示无法转换. 如下面代码: PersonInfor 为实体类,T为泛型 public int GetPersonMsgW_< ...

  6. C#利用反射实现实体类ListT索引器

    相关背景: 在项目开发中,我们经常会自定义一些实体类,在某些需要动态赋值的功能中,我们无法知道到下一个需要赋值的字段名称是什么,只知道会从其他返回需要赋值的字段名称和值,这时候就需要实现索引器了,就像 ...

  7. velocity笔记(一)什么是velocity,我们什么时候会使用到这个,基本语法,利用模板生成实体类的各层代码

    目录 什么是velocity 应用场景 组成结构 快速入门 总结 基本语法 注释 非解析内容 引用 变量引用 属性引用 方法引用 指令 流程控制指令 #set 指令 #if/#elseif/#else ...

  8. c# DataTable与不同结构实体类转换的方法实例

    1.实体类样例Person.cs /// <summary> /// 具体的实体类,和数据表中不同 /// </summary> public class Person {[D ...

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

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

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

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

最新文章

  1. “三巨头”齐获图灵奖!沉浮30载终于开启AI复兴时代
  2. Zend Studio 修改高亮变量的颜色、括号颜色
  3. .net core 发起web请求_温故知新 .Net重定向深度分析
  4. C#的变迁史02 - C# 2.0篇
  5. 一般图最大匹配(UOJ-79)
  6. Binary Tree Level Order Traversal II --leetcode C++
  7. history 改成 模式_前端路由三种模式
  8. 战矛在线Java_战矛在线职业怎么选?新人职业选择推荐
  9. linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题
  10. matlab里simulink,如何运用MATLAB中的Simulink?
  11. python发送soap报文_python用http发送soap报文进行webservice接口调用
  12. python读取csv数据出错_在python中读取csv文件时出现错误“no such file or directory”...
  13. Atiitt 图像处理的常见功能业务用途与类库与功能实现 目录 1. 常见业务场景 2 1.1. 缩略图 2 1.2. 判断图像大小分辨率要求 长度 宽度 2 1.3. 图像格式 转换,,黑白图像
  14. 初中计算机考试素材,初中信息技术素材.ppt
  15. 微信小程序ui框架 graceUI 使用半年评测
  16. Stochastic Pooling简单理解
  17. 余世伟视频笔记----如何塑造管理者的性格魅力领袖根性之积极和大度
  18. CNVD-2022-10270/CNVD-2022-03672 向日葵RCE复现
  19. appscan如何扫描移动应用APP
  20. 国有患难,君死社稷,大夫死宗庙,百姓最后死乡间...

热门文章

  1. TensorFlow学习笔记——循环神经网络
  2. PyTorch:模型层和nn container
  3. 深度学习:词嵌入Embedding
  4. 【ffmpeg】overlay带有透明通道的视频
  5. docker获取数据库时间相差8小时_Docker部署服务时间相差8小时解决方法
  6. JSP — 小项目【实现登录界面】
  7. Android ListView + ArrayAdapter、SimpleAdapter、BaseAdapter实现列表
  8. git log --stat的使用说明
  9. bzoj4006 [JLOI2015]管道连接
  10. English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)...