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. iOS 面试常见问题最全梳理

    序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态 ...

  2. Test注解的两个属性:expected和timeout

    JUnit4:Test文档中的解释: The Test annotation supports two optional parameters. The first, expected, declar ...

  3. java项目获取路径的几种方式

    第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...

  4. 常调用的Webservice接口 集合

    1. 查询手机:http://www.yodao.com/smartresult-xml/search.s?type=mobile&q=手机号码 2. 查询IP:http://www.yoda ...

  5. js中取session的值

    在js中貌似不能取session的值,我在后台设置的session一直拿不到,于是用间接的方式拿到session的值. 首先在jsp中嵌入java代码,用java设置一个变量来取session值,再在 ...

  6. 使用ant自动编译、打包生成apk文件

    上次使用命令行生成apk文件<Android 命令行编译.打包生成apk文件>,学习命令行生成的目的是为了编写ant打下基础. 一. ant环境 下载ant包,配置环境变量 二.ant编译 ...

  7. 又一道软通动力7K月薪面试题——银行业务调度系统

    后期补充:网友对我诟病最多的就是我帮学生做面试题,说这是小偷和骗子行为,在此,我对自己给学员做面试题做出例如以下解释:  (1)学员拿着面试题来找老师,学生也事先思考和尝试后实在没有办法,又求职心切才 ...

  8. 阻止IOS自动识别页面上的电话号码、email地址

    之前写页面的时候碰到一个很恶心的情况,在6P上数字自动变色,后来找了一些资料: 在iOS的浏览器上,他们有时候会有一些“自作聪明”,自动把页面上的一串数字识别成电话号码,这样用户不小心点击这串数字,就 ...

  9. iOS系统相册的有关操作

    iOS中,我们选择相册中的资源和调用摄像头可以使用 :UIImagePickerController类来完成,不使用UI我们可以通过:ALAssetsLibrary类来使用相册资源. 一. ALAss ...

  10. uva 10763 Foreign Exchange <"map" ,vector>

    Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enthu ...