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 delegate 和 block
//委托的协议定义 @protocol UpdateDelegate <NSObject> - (void)update; @end @interface Test : NSObject ...
- java匿名内部类,多态,接口练习
1多态以及接口调用方法: public class Interface { public static void main(String[] args) { Al x = new Al(); jian ...
- 谈谈UIView的几个layout方法-layoutSubviews、layoutIfNeeded、setNeedsLayout...
最近在学习swift做动画,用到constraint的动画,用到layoutIfNeeded就去研究了下UIView的这几个布局的方法. 下面是做得一个动画,下载地址:https://github.c ...
- 浅谈Android系统开发中LOG的使用
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...
- C#枚举器接口IEnumerator的实现
原文(http://blog.csdn.net/phpxin123/article/details/7897226) 在C#中,如果一个类要使用foreach结构来实现迭代,就必须实现IEnumera ...
- 关于position和float的用法!
我要说的是这部分的切图, 先说一下为什么要用到position 看我的截图, 应该知道这块的组成是有两部分, 但中间那个绿圈中, 组成的两个部分有重叠的, 这时候, 可能会想用float, 但floa ...
- baidu地图让多个标注出现在最佳视野
原文:http://www.cnblogs.com/milkmap/archive/2011/08/23/2150641.html 摘要: “我有一堆标注,不规则的散落在地图的各个地方,我想把它们展示 ...
- hdu3830 (二分+LCA)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Checkers Time Limit: 2000/1000 MS (Java/O ...
- 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...
- gcc 编译的4个过程简单识记
直入正题,测试编译代码如下: lude <stdio.h> int main() { ,y,z; x*=(y=z=); printf("%d\n",x); z=; x= ...