MysqlHelper使用反射机制智能推算数据类型以及属性名称
public class MySqlHelper
{
private string ConnString; public MySqlHelper(string connectionString)
{
ConnString = connectionString;
}
public IList<T> RunMySqlSelect4ReturnList<T>(string strCommand) where T : new()
{ MySqlCommand mySqlCommand = new MySqlCommand();
mySqlCommand.CommandText = strCommand.ToString();
IList<PropertyInfo> ilPropertyInfo = typeof(T).GetProperties().ToList(); //p[0].Name =travel_id;
IList<T> ilResult = new List<T>(); DataTable dt = new DataTable();
using (MySqlConnection conn = new MySqlConnection(this.ConnString))
{
conn.Open();
using (MySqlCommand cmd = mySqlCommand)
{
cmd.Connection = conn;
using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
dt.Load(rdr);
}
}
} foreach (DataRow dr in dt.Rows)
{
T tItem = new T();
foreach (var v in ilPropertyInfo)
{
if (dt.Columns[v.Name] == null) continue;
ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]);
}
ilResult.Add(tItem);
}
return ilResult;
}
public T getSinggleObj<T>(string strCommand) where T : new()
{ MySqlCommand mySqlCommand = new MySqlCommand();
mySqlCommand.CommandText = strCommand.ToString();
IList<PropertyInfo> ilPropertyInfo = typeof(T).GetProperties().ToList(); //p[0].Name =travel_id;
T ilResult = new T(); DataTable dt = new DataTable();
using (MySqlConnection conn = new MySqlConnection(this.ConnString))
{
conn.Open();
using (MySqlCommand cmd = mySqlCommand)
{
cmd.Connection = conn;
using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
dt.Load(rdr);
}
}
}
if (dt.Rows.Count <= )
{
return default(T);
}
else
{
foreach (DataRow dr in dt.Rows)
{
T tItem = new T();
foreach (var v in ilPropertyInfo)
{
if (dt.Columns[v.Name] == null) continue;
ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]);
}
ilResult = tItem;
}
}
return ilResult;
}
public IList<T> RunMySqlSelect4ReturnList<T>(DataTable dts) where T : new()
{ IList<PropertyInfo> ilPropertyInfo = typeof(T).GetProperties().ToList(); //p[0].Name =travel_id;
IList<T> ilResult = new List<T>(); DataTable dt = dts; foreach (DataRow dr in dt.Rows)
{
T tItem = new T();
foreach (var v in ilPropertyInfo)
{
if (dt.Columns[v.Name] == null) continue;
ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]);
}
ilResult.Add(tItem);
}
return ilResult;
}
}
public static class ConvertionExtensions
{
public static T ConvertTo<T>(this IConvertible convertibleValue)
{
var t = typeof(T);
if (null == convertibleValue)
{
return default(T);
}
if (!typeof(T).IsGenericType)
{
return (T)Convert.ChangeType(convertibleValue, typeof(T));
}
else
{
Type genericTypeDefinition = typeof(T).GetGenericTypeDefinition();
if (genericTypeDefinition == typeof(Nullable<>))
{
return (T)Convert.ChangeType(convertibleValue, Nullable.GetUnderlyingType(typeof(T)));
}
}
throw new InvalidCastException(string.Format("Invalid cast from type \"{0}\" to type \"{1}\".", convertibleValue.GetType().FullName, typeof(T).FullName));
} public static void SetValue(object inputObject, string propertyName, object propertyVal)
{
//find out the type
Type type = inputObject.GetType(); //get the property information based on the type
System.Reflection.PropertyInfo propertyInfo = type.GetProperty(propertyName); //find the property type
Type propertyType = propertyInfo.PropertyType; //Convert.ChangeType does not handle conversion to nullable types
//if the property type is nullable, we need to get the underlying type of the property
var targetType = IsNullableType(propertyInfo.PropertyType) ? Nullable.GetUnderlyingType(propertyInfo.PropertyType) : propertyInfo.PropertyType; //Returns an System.Object with the specified System.Type and whose value is
//equivalent to the specified object.
propertyVal = Convert.ChangeType(propertyVal, targetType); //Set the value of the property
propertyInfo.SetValue(inputObject, propertyVal, null); } private static bool IsNullableType(Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>));
} }
MysqlHelper使用反射机制智能推算数据类型以及属性名称的更多相关文章
- 通过java反射机制,获取对象的属性和值(包括所有继承的父类)
java的反射机制提供了两种方法: getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性. get ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- Android : 反射机制获取或设置系统属性(SystemProperties)【转】
本文转载自:https://blog.csdn.net/wei_lei/article/details/70312512 Android.os.SystemProperties 提供了获取和设置系统属 ...
- C#利用反射机制,获取实例的属性和属性值
C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();// ...
- 【java】解析java类加载与反射机制
目录结构: contents structure [+] 类的加载.连接和初始化 类的加载 类的连接 类的初始化 类加载器 类加载器机制 自定义类加载器 URLClassLoader类 反射的常规操作 ...
- Android反射机制:手把手教你实现反射
什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
- 面试题思考:什么是 Java 的反射机制
一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...
- 面试题之------Java 反射机制
一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...
- 【Java基础】java中的反射机制与动态代理
一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...
随机推荐
- # Writing your-first Django-app-part 4-simple-form
简单的表单 处理表单提交-跳转/错误信息 处理表单提交--结果显示 通用view (generic view) 设计:越少代码越好? 1.修改DemoAppPoll/urls.py 2.修改DemoA ...
- C语言 · 比较字符串
算法训练 比较字符串 时间限制:1.0s 内存限制:512.0MB 编程实现两个字符串s1和s2的字典序比较.(保证每一个字符串不是另一个的前缀,且长度在100以内).若s1和s2相 ...
- [RTC]系统和RTC的时间保持一致
hwclock输出的格式似乎是没有格式化的命令,所以只能修改date date "+%a %d %b %Y %I:%M:%S %p %Z"
- PHP——大话PHP设计模式——PSR-0规范
- es 加磁盘扩容
elasticsearch多磁盘扩容 1.问题 由于早前elasticsearch集群数据存储路径只配置了一个,所以某天磁盘突然爆满,集群差点当机.需重新配置多路径存储路径,因为在生产环境,得保证 ...
- Spring Cloud Config 配置刷新
客户端进行刷新操作. 1.添加 actuator包,这样 /refresh url才处于可用状态. <dependency> <groupId>org.springframew ...
- PCL点云配准(2)
(1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点 ...
- Chrome 主页被篡改
尝试恢复设置.重装chrome.改注册表均无果.最后意外发现解决方法无比简单:删掉桌面上的chrome图标,打开安装文件夹找到chrome.exe,随便改成什么名字.exe,比如baiduwcnm,重 ...
- orcale存储过程学习之路--创建空存储过程(二)
--创建表 create table TESTTABLE( id1 VARCHAR2(12), name VARCHAR2(32))select t.id1,t.name from TESTTA ...
- 关于源码输出,浏览器不解析Html标签
有时候根据需要我们需要看到浏览器上源码效果如: 但是我如果在html中输入 <a href = 'http://www.baidu.com'>百度</a>那么问题来了,总是显示 ...