利用反射将Datatable、SqlDataReader转换成List模型
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 > ); } ///<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;
}
<strong> </strong> ///<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;
}
作者:dasihg
转载:http://blog.csdn.net/dasihg/article/details/8943811
利用反射将Datatable、SqlDataReader转换成List模型的更多相关文章
- 利用反射把数据集合转换成List
---ResultSet数据集 public static List toList(ResultSet rs, Class cls) { List list = new ArrayList(); tr ...
- C# 利用反射动态将字符串转换成属性对应的类型值
/// <summary> /// 为指定对象分配参数 /// </summary> /// <typeparam name="T">对象类型& ...
- C# 将DataTable数据源转换成实体类
using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...
- 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)
转:http://www.cnblogs.com/the7stroke/archive/2012/04/22/2465591.html using System.Collections.Generic ...
- C 利用移位运算符 把十进制转换成二进制
#include <stdio.h> int main(void){ //利用移位运算符 把十进制转换成二进制 int c; printf("输入数字:");//8 s ...
- 「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型
在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助 ...
- h5模型文件转换成pb模型文件
本文主要记录Keras训练得到的.h5模型文件转换成TensorFlow的.pb文件 #*-coding:utf-8-* """ 将keras的.h5的模型文件,转换 ...
- 【tensorflow-v2.0】如何将模型转换成tflite模型
前言 TensorFlow Lite 提供了转换 TensorFlow 模型,并在移动端(mobile).嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具 ...
- 利用反射实现DataTable 与 List<T> 转换
今天上班不太忙,就想着总结一下反射.扩展方法.以及lambda表达式的用法,自己就写了个小DEMO记录一下,希望各位大牛们看到后觉得不对的地方请及时提出.这篇文章中我只说明我的用法,作为一个备忘,基本 ...
随机推荐
- 原生JS--COOKIE
原生JS--COOKIE: COOKIE基础及应用:1.什么是COOKIE==>页面用来保存信息,比如:自动登录,记住用户名2.COOKIE的特性: --同一个网站中,所有的页面共享同一套co ...
- struts_表单得到数据
在大家学习struts表达式语言的时候经常会遇到,从表单的提交上面得到数据, 而如何将表单的数据得到呢? 下面就介绍其中的一种方式: :以类的方式进行注入我们以login为例子 首先可以在struts ...
- TCP/IP协议(二)
2014-09-04 11:03:27 注:关于seq 和 ack 的理解,seq为发送的字节的第一个序号,一直累加,ack接收字节的最后一个序号+1,建立连接和结束连接时的SYN.FIN标志位占 ...
- filebeat安装与基础用法
来自官网,版本为1.2 下载rpm包并安装 wget -c https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm r ...
- OpenCV安装配置的简单记录
在ubuntu16.04下安装OpenCV 2.4.11的简单记录 1. 安装cmake,执行$apt-get install cmake即可,cmake -version验证 2. 下载OpenCV ...
- [问题2015S13] 复旦高等代数 II(14级)每周一题(第十四教学周)
[问题2015S13] 设 \(A=(a_{ij})\) 为 \(n\) 阶实矩阵, 定义函数 \[f(A)=\sum_{i,j=1}^na_{ij}^2.\] 设 \(P\) 为 \(n\) 阶非 ...
- 用JavaBean实现数据库的连接和关闭,在jsp页面输出数据库中student表中学生的信息
package com.hanqi.test; import java.sql.*; public class XveSheng { Connection conn; Statement st; Re ...
- python的反射机制
转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...
- java高薪之路__009_网络
1. InetAddress类2. Socket: IP地址和端口号的结合,socket允许程序把网络连接当成一个流,数据在两个socket间通过IO传输, 通信的两端都要有socket. 主动发起通 ...
- ionic cordova
ionic cordova 打包 文章 http://blog.csdn.net/i348018533/article/details/47258449 http://www.cnblogs.com/ ...