public class CommonService
{
#region DataReader转化
/// <summary>
/// 将DataReader转化为Table
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static DataTable DataReaderToTable(SqlDataReader reader)
{
var dt = new DataTable();
if (reader.HasRows)
{
for (int i = ; i < reader.FieldCount; i++)
{
var column = new DataColumn();
column.DataType = reader.GetFieldType(i);
column.ColumnName = reader.GetName(i); dt.Columns.Add(column);
}
while (reader.Read())
{
object[] rowObjects = new object[reader.FieldCount];
for (int i = ; i < reader.FieldCount; i++)
{
rowObjects.SetValue(reader.GetValue(i), i);
} dt.LoadDataRow(rowObjects, true);
}
}
else
{
dt = null;
} return dt;
} /// <summary>
/// 将DataReader转化为Entity
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reader"></param>
/// <returns></returns>
public static List<T> DataReaderToEntity<T>(SqlDataReader reader) where T : new()
{
var list = new List<T>();
T t = default(T); if (reader.HasRows)
{
while (reader.Read())
{
t = (T)Activator.CreateInstance(typeof(T));
for (int i = ; i < reader.FieldCount; i++)
{
PropertyInfo property = t.GetType().GetProperty(reader.GetName(i), BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
if (Convert.IsDBNull(reader.GetValue(i)))
{
property.SetValue(t, null, null);
}
else
{
property.SetValue(t, reader.GetValue(i), null);
} list.Add(t);
}
}
} return list;
}
#endregion #region DataTable转化
/// <summary>
/// Table转化为Entity
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <returns></returns>
public static List<T> TableToEntity<T>(DataTable table) where T : new()
{
var list = new List<T>();
T t = default(T);
t = (T)Activator.CreateInstance(typeof(T)); if (table == null || table.Rows.Count == )
{ }
else
{
for (int i = ; i < table.Rows.Count; i++)
{
foreach (DataColumn column in table.Columns)
{
PropertyInfo propertyInfo = t.GetType().GetProperty(column.ColumnName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (Convert.IsDBNull(table.Rows[i][column.ColumnName]))
{
propertyInfo.SetValue(t, null, null);
}
else
{
propertyInfo.SetValue(t, table.Rows[i][column.ColumnName], null);
}
} list.Add(t);
}
} return list;
} /// <summary>
/// Table转化为DataSet
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static DataSet TableToDataSet(DataTable table)
{
var dataSet = new DataSet();
dataSet.Tables.Add(table); return dataSet;
}
#endregion #region Entity转化为Table public static DataTable EntityToTable<T>(List<T> list) where T : new()
{
var table = new DataTable(); if (list == null || list.Count == )
{ }
else
{
T t = list.FirstOrDefault();
List<PropertyInfo> propertyInfos = t.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase).ToList();
foreach (var propertyInfo in propertyInfos)
{
table.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType);
}
object[] objects = new object[propertyInfos.Count]; for (int i = ; i < list.Count; i++)
{
foreach (var propertyInfo in propertyInfos)
{
objects.SetValue(propertyInfo.GetValue(list[i], null), propertyInfos.IndexOf(propertyInfo));
} table.LoadDataRow(objects, true);
}
} return table;
} #endregion
}

DataReader、Table、DataSet和Entity相互转化的更多相关文章

  1. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  2. Data Base sqlServer DataReader与DataSet的区别

    sqlServer   DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...

  3. DataReader 和 DataSet 的区别

    摘自:http://www.cnblogs.com/zhjjNo1/archive/2009/08/26/1554420.html 第一种解释 DataReader和DataSet最大的区别在于,Da ...

  4. DataReader和DataSet的区别以及使用

    DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示:   DataReader DataSet 数 ...

  5. DataReader和DataSet区别

    可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条: 1.       DataReader是数据管理提供者类,而DataSet是一 ...

  6. sqlServer DataReader与DataSet的区别

    sqlServer   DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...

  7. ADO.NET_包括DataReader和dataSet的使用

    今天总结了一下ADO.NET编程中DataReader和dataSet两个比较重要的对象的使用,完成了combobox,listbox,以及fpSpread动态添加数据的测试,对使用sqlComman ...

  8. C# 之 DataReader 和 DataSet 的区别

    本文转载自:http://www.cnblogs.com/xinaixia/p/4920630.html 1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占 ...

  9. DataReader和DataSet的异同

    DataReader:使用时始终占用SqlConnection,在线操作数据库:每次只在内存中加载一条数据,所以占用的内存是很小的:是只进的. 只读的. DataSet:则是将数据一次性加载在内存中. ...

随机推荐

  1. vmware虚拟机迁移系统到其它磁盘(xjl456852原创)

    有时我们将vmware安装的系统放在了磁盘空间比较小的盘里,后来磁盘空间不够用了,我们需要将文件移动到其它磁盘.腾出这个磁盘的空间. 我安装的系统有10个,总占空间大小170多GB.需要从D盘迁移到G ...

  2. 检测iOS系统的定位服务

    [CLLocationManager locationServicesEnabled]检测的是整个iOS系统的位置服务开关

  3. Mac截屏快捷键总结

    Mac截屏快捷键总结 1)Command-Shift-3: 将整个屏幕拍下并保存到桌面. 2)Command-Shift-Control-3:     将整个屏幕拍下并保存到剪贴板(Clipboard ...

  4. android recover 系统代码分析 -- 选择进入

    最近做Recovery的规范及操作指导文档,花了一些时间将流程搞清. Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级.而在进入Recover ...

  5. 解决angular 与django的冲突

    {% block main %} <script type="text/javascript" src="http://cdnjs.cloudflare.com/a ...

  6. POJ 1469 ZOJ1140 二分匹配裸题

    很裸,左点阵n,右点阵m 问最大匹配是否为n #include <cstdio> #include <cstring> #include <vector> usin ...

  7. DOS 选择跳转实现、dos + bcp 双击导入和导出数据

    DOS 选择跳转实现.dos + bcp 双击导入和导出数据 option.bat @echo off :Start2 cls goto Start :Start title Frequently U ...

  8. [HeadFrist-HTMLCSS学习笔记][认识HTML中的“HT”]

    学习超链接 超链接 使用\元素创建一个超文本链接,链接到另一个Web 页面. \元素的内容会变成为Web页面中可单击的文本.href属性告诉浏览器链接的目标文件 <a href="el ...

  9. Android-现场保护

    现场保护 当一个活动进入到了停止的状态,是有可能被系统回收的,我们都学过Activity的生命周期 当活动处于onPause() ,onStop() ,onDestroy() 三种状态时程序可能会被A ...

  10. linux字体安装

    Google查了一下,果然Windows下的ttf字体与GNOME是兼容的!我立即确定了我的方案——使用Windows下的“微软雅黑”体作为桌面和应用程序的默认字体! 1. 首先获得一套“微软雅黑”字 ...