DataReader、Table、DataSet和Entity相互转化
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相互转化的更多相关文章
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...
- Data Base sqlServer DataReader与DataSet的区别
sqlServer DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...
- DataReader 和 DataSet 的区别
摘自:http://www.cnblogs.com/zhjjNo1/archive/2009/08/26/1554420.html 第一种解释 DataReader和DataSet最大的区别在于,Da ...
- DataReader和DataSet的区别以及使用
DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示: DataReader DataSet 数 ...
- DataReader和DataSet区别
可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条: 1. DataReader是数据管理提供者类,而DataSet是一 ...
- sqlServer DataReader与DataSet的区别
sqlServer DataReader与DataSet的区别 从以下这几个方面比较: 1.与数据库连接: DataReader:面向连接,只读,只进,只能向前读,读完数据就断开连接: DataS ...
- ADO.NET_包括DataReader和dataSet的使用
今天总结了一下ADO.NET编程中DataReader和dataSet两个比较重要的对象的使用,完成了combobox,listbox,以及fpSpread动态添加数据的测试,对使用sqlComman ...
- C# 之 DataReader 和 DataSet 的区别
本文转载自:http://www.cnblogs.com/xinaixia/p/4920630.html 1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占 ...
- DataReader和DataSet的异同
DataReader:使用时始终占用SqlConnection,在线操作数据库:每次只在内存中加载一条数据,所以占用的内存是很小的:是只进的. 只读的. DataSet:则是将数据一次性加载在内存中. ...
随机推荐
- ios block使用
BlockTest.h #import <Foundation/Foundation.h> typedef void (^didFinishBlock)(NSString *str); t ...
- POJ3260:The Fewest Coins(混合背包)
Description Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he a ...
- (2)入门指南——(3)为什么jquery工作的很好(Why jQuery works well)
With the resurgence of interest in dynamic HTML comes a proliferation of JavaScript frameworks. Some ...
- 前端编辑神器Brackets
介绍 Brackets 是Adobe发布的一款免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境.使用Node.js构建!官网:http://brackets.i ...
- 关于 linux ssh 的配置.
一.禁止root用户远程登录: # cd /etc/ssh # vi sshd_config 将 permitRootLogin 后面的值改成 no 如下图: 然后再重启sshd服务即可,如下: # ...
- [Spring入门学习笔记][Spring的AOP原理]
AOP是什么? 面向切面编程 软件工程有一个基本原则叫做“关注点分离”(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...
- Oracle - 使用序列+触发器实现主键自增长
Oracle中的自增,不如Sql server那般方便. --.创建序列 CREATE SEQUENCE "TABLE_NAME"."SQ_NAME" MINV ...
- html链接
1. <a href="/index.html">本文本</a> 是一个指向本网站中的一个页面的链接.</p><p><a hr ...
- js常用设计模式
组合使用构造函数模式和原型模式.其中,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性. 例子: <script> function Person(name,age,job) ...
- jquery find()和filter()的区别
在写js查找当前标签下某一子元素的子元素集合时,用到了此方法 $(".flyout-trigger").mouseover(function(){ var maxnum=$(thi ...