zoukankan      html  css  js  c++  java
  • 利用泛型和反射,将从数据库select出来的集合直接转换成对象

    现在的版本是直接利用反射的,下一步将改编成利用快速反射

    public
    static T ExcuteEntity<T>(SQLiteCommand cmd) { Type entityType = typeof(T); PropertyInfo[] fieldinfos = entityType.GetProperties(); T entity = (T)Activator.CreateInstance(entityType); DbDataReader reader = null; if (conn == null || conn.Length == 0) throw new ArgumentNullException("connectionString"); SQLiteConnection con = new SQLiteConnection(conn); SQLiteTransaction trans = null; PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText); try { reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); reader.Read(); } catch (Exception ex) { throw ex; } foreach (PropertyInfo field in fieldinfos) { int col=reader.GetOrdinal(field.Name); if (col != -1) { Type mytype = reader.GetFieldType(col); entityType.GetProperty(field.Name).SetValue(entity, Convert.ChangeType(reader.GetValue(col), mytype), null); } else { continue; } } return entity; } public static List<T> ExecuteCollection<T>(SQLiteCommand cmd) { List<T> result = new List<T>(); Type entityType = typeof(T); PropertyInfo[] fieldinfos = entityType.GetProperties(); DbDataReader reader = null; if (conn == null || conn.Length == 0) throw new ArgumentNullException("connectionString"); SQLiteConnection con = new SQLiteConnection(conn); SQLiteTransaction trans = null; PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText); try { reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception ex) { throw ex; } while (reader.Read()) { T entity = (T)Activator.CreateInstance(entityType); foreach (PropertyInfo field in fieldinfos) { int col = reader.GetOrdinal(field.Name); if (col != -1) { Type mytype = reader.GetFieldType(col); entityType.GetProperty(field.Name).SetValue(entity, Convert.ChangeType(reader.GetValue(col), mytype), null); } else { continue; } } result.Add(entity); } return result; }
  • 相关阅读:
    斐波纳契数列
    实现刮刮乐的效果
    简易版美图秀秀
    js 宏任务和微任务
    作业3 阅读
    作业2 结对子作业
    做汉堡
    练习一
    Java设计模式十八:代理模式(Proxy)
    Java设计模式二十:适配器模式(Adapter)
  • 原文地址:https://www.cnblogs.com/danye/p/2571173.html
Copyright © 2011-2022 走看看