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使用反射机制智能推算数据类型以及属性名称的更多相关文章

  1. 通过java反射机制,获取对象的属性和值(包括所有继承的父类)

    java的反射机制提供了两种方法: getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性. get ...

  2. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  3. Android : 反射机制获取或设置系统属性(SystemProperties)【转】

    本文转载自:https://blog.csdn.net/wei_lei/article/details/70312512 Android.os.SystemProperties 提供了获取和设置系统属 ...

  4. C#利用反射机制,获取实例的属性和属性值

    C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();// ...

  5. 【java】解析java类加载与反射机制

    目录结构: contents structure [+] 类的加载.连接和初始化 类的加载 类的连接 类的初始化 类加载器 类加载器机制 自定义类加载器 URLClassLoader类 反射的常规操作 ...

  6. Android反射机制:手把手教你实现反射

    什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...

  7. 面试题思考:什么是 Java 的反射机制

    一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...

  8. 面试题之------Java 反射机制

    一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...

  9. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

随机推荐

  1. 阿里云RDS上用mysqldump导入导出

    文章转载自: http://blog.csdn.net/jk0803_wantao/article/details/9179217 1. 开通云服务器服务.2. 开通RDS服务,如果开通成功,会返回给 ...

  2. 【Java/Spring】Spring的配置问题,IDEA报错“No mapping found for HTTP request with URI […] in DispatcherServlet”

    从SVN上拷贝下JavaWeb项目,Spring框架的配置文件需要修改.部署好Tomcat后,启动服务,可以进入Web项目主页,但是访问其他URL时直接跳转到404,IDEA报错“No mapping ...

  3. Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  4. Java编程的逻辑 (53) - 剖析Collections - 算法

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. js 控制输入文字的字数

    直接上代码. <html> <head> </head> <body> <textarea id='txtArea' cols='50' rows ...

  6. Servlet、Filter、Listener总结

    servlet规范提供了一组标准的servlet api.servlet容器就是servlet规范的实现. 1.In Action (1)写一个类继承HttpServlet: (2)重写其中的方法. ...

  7. C#/.NET 学习之路——从入门到放弃

    原文链接地址:http://blog.liuhaoyang.me/dotnet/2016/11/25/csharp-books/ 向架构师大步迈进的书单 C# 入门 <C# 本质论> &l ...

  8. 安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法

    今天在windows7_x64上安装JDK的时候提示IllegalArgumentException:Invalid characters in hostname, 解决方法: 1.打开[控制面板\系 ...

  9. Reusable async validation for WPF with Prism 5

    WPF has supported validation since the first release in .NET 3.0. That support is built into the bin ...

  10. 【转】Android开发,按手机上的back键时程序最小化而不退出

    @Override public boolean dispatchKeyEvent(KeyEvent event) { // menuUtils.createTwoDispatcher(event); ...