利用反射将Datatable、SqlDataReader转换成List模型
来源:互联网 发布:js防水涂料施工图集 编辑:程序博客网 时间:2024/05/21 06:26
1. DataTable转IList
public class DataTableToList<T>whereT :new()
{
///<summary>
///利用反射将Datatable转换成List模型
///</summary>
///<param name="dt"></param>
///<returns></returns>
public static List<T> ConvertToList(DataTabledt)
{
List<T> list =newList<T>();
Typetype =typeof(T);
stringtempName =string.Empty;
foreach(DataRowdrindt.Rows)
{
T t =newT();
PropertyInfo[] propertys =
t.GetType().GetProperties();
foreach(PropertyInfopiinpropertys)
{
tempName = pi.Name;
if(dt.Columns.Contains(tempName))
{
if(!pi.CanWrite)
{
continue;
}
var value = dr[tempName];
if(value !=DBNull.Value)
{
pi.SetValue(t, value,null);
}
}
}
list.Add(t);
}
returnlist;
}
}
2. SqlDataReader转IList
/// <summary> /// 判断SqlDataReader是否存在某列 /// </summary> /// <param name="dr">SqlDataReader</param> /// <param name="columnName">列名</param> /// <returns></returns> private bool readerExists(SqlDataReader dr, string columnName) { dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'"; return (dr.GetSchemaTable().DefaultView.Count > 0); } ///<summary> ///利用反射和泛型将SqlDataReader转换成List模型 ///</summary> ///<param name="sql">查询sql语句</param> ///<returns></returns> public IList<T> ExecuteToList<T>(string sql) where T : new() { IList<T> list; Type type = typeof (T); string tempName = string.Empty; using (SqlDataReader reader = ExecuteReader(sql)) { if (reader.HasRows) { list = new List<T>(); while (reader.Read()) { T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (readerExists(reader, tempName)) { if (!pi.CanWrite) { continue; } var value = reader[tempName]; if (value != DBNull.Value) { pi.SetValue(t, value, null); } } } list.Add(t); } return list; } } return null; }
3、结果集从存储过程获取
/// <summary> /// 处理存储过程 /// </summary> /// <param name="spName">存储过程名</param> /// <param name="parameters">参数数组</param> /// <returns>sql数据流</returns> protected virtual SqlDataReader ExecuteReaderSP(string spName, ArrayList parameters) { SqlDataReader result = null; cmd.CommandText = spName; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Clear(); if (parameters != null) { foreach (SqlParameter param in parameters) { cmd.Parameters.Add(param); } } try { Open(); result = cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception e) { if (result != null && (!result.IsClosed)) { result.Close(); } LogHelper.WriteLog("\r\n方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】" + spName, e); throw new Exception(e.Message); } return result; }
///<summary> ///利用反射将SqlDataReader转换成List模型 ///</summary> ///<param name="spName">存储过程名称</param> ///<returns></returns> public IList<T> ExecuteQueryListSP<T>(string spName, params SqlParameter[] listParams) where T : new() { IList<T> list; Type type = typeof(T); string tempName = string.Empty; using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams))) { if (reader.HasRows) { list = new List<T>(); while (reader.Read()) { T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; //for (int intField = 0; intField < reader.FieldCount; intField++) //{//遍历该列名是否存在 //} if (readerExists(reader, tempName)) { if (!pi.CanWrite) { continue; } var value = reader[tempName]; if (value != DBNull.Value) { pi.SetValue(t, value, null); } } } list.Add(t); } return list; } } return null; }
- 利用反射将Datatable、SqlDataReader转换成List模型
- 将SqlDataReader转换为DataTable
- SqlDataReader转换成DataTable
- 将datatable转换成list
- 将datatable转换成模型
- ADO.NET ASP.NET 将 SQLDatareader 转换成 List
- C#使用反射将DataTable转换List<T>
- C#利用委托反射将DataTable转换为实体集
- 将List集合类转换成DataTable
- 将List实体转换成DataTable
- 将list 转换为 datatable
- 将List转换为DataTable
- List转换成DataTable
- DataTable 转换成 List
- Datatable转换成 List
- Datatable转换成List
- 将泛类型集合List类转换成DataTable
- 将泛类型集合List类转换成DataTable
- silverlight调用Geometry服务实现缓冲区
- Jsp与servlet的区别
- Camel blueprint + karaf 企业总线架构
- 抗1,倘若生活不顺天意,我死你们活
- jbpm流程设计之fork、join
- 利用反射将Datatable、SqlDataReader转换成List模型
- Windows server 2008 PHP环境搭建
- Serv-u安全设置
- android编译环境搭建的问题
- HTTpClient实现get方式下载
- {dede:php}生成一个随机整数
- 2013年、2012、2011年中国软件业收入百强名录 看中国软件业这三年的变化
- 3389 修改端口批处理
- Nuke中解决渲染闪烁的办法