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; }
  • 相关阅读:
    【阅读笔记】《C程序员 从校园到职场》第四章 变量和函数
    【阅读笔记】《C程序员 从校园到职场》第三章 程序的样式(大括号)
    睡眠呼吸机-相关检测算法的实现原理
    电磁学5.场能密度、电容与介电常数
    电磁学4.高压击穿
    电磁学3.静电屏蔽
    电磁学2.静电势能和电势
    电磁学1.高斯定律
    BLDC开发笔记8.过流保护与电流采样要点
    BLDC开发笔记7.转速和扭矩的影响因素和开关管的热分析概述
  • 原文地址:https://www.cnblogs.com/danye/p/2571173.html
Copyright © 2011-2022 走看看