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:则是将数据一次性加载在内存中. ...
随机推荐
- 河内塔(hanoi)
理论: 河内塔: 1.有三根杆子A,B,C.A杆上有若干碟子 2.每次移动一块碟子,小的只能叠在大的上面 3.把所有碟子从A杆全部移到C杆上 讲解: 设A上有n个盘子.如果n=1,则将圆盘从A直接 ...
- Android将第三方jar打包进apk
转自:http://blog.csdn.net/liushaogeng/article/details/6641704 使用第三方jar包 除了我以下介绍的方法,别的方法我基本上都试验过,均会出现编译 ...
- 在Docker中运行torch版的neural style
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...
- js获取名字为XX的标签
$("input[name='XX']"); <input name="address_select" type="radio" va ...
- WebApplication和WebSite的区别
不同点 1. 创建方式不同 一个是FILE->NEW->PROJECT->ASP.NET WEB APPLICATION 另外一个是 FILE->NEW->WEBSITE ...
- a标签伪类的顺序
在一次开发项目中,我用a链接来做效果,测试的时候发现,a:hover被点击后的效果就不再了!我百度才知道,原来在css写a链接也是有顺序之分的. 顺序应该是: a:link a标签还未被访问的状态: ...
- Eclipse控制台显示Tomcat日志
今天看一篇学习Struts的博文,文章里面提到从生成的日志,结果,怎么鼓捣都看不到.心情也跟着烦躁了.于是晚饭后出去散步,冷静一下,然后决定晚上一定搞掂这个问题.这不,搞掂了,写篇博文记录一下. St ...
- uploadify ,前端页面获取值,json,ajax
针对这几月的技术,做一次小总结 上传控件uploadify function inexel() { $("#btnExcel").uploadify({ 'method': 'po ...
- SQL触发器学习
简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,upd ...
- 英文Ubuntu下Emacs 使用 ibus 五笔
Ubuntu 12.04 Precise 英文版本 1. 安装ibus/安装ibus-table-wubi http://wiki.ubuntu.org.cn/IBus 其中im-switch命令要在 ...