zoukankan      html  css  js  c++  java
  • 泛型反反射方法显示

    public List<T> Query<T>(string where) where T : class, new()
    {
    DataTable tb = new DataTable();
    List<T> list = new List<T>();
    string sql = GetQuery();
    sql += where;
    //反射
    using (SqlConnection con = new SqlConnection(LIANJIE))
    {
    con.Open();
    using (SqlCommand com=new SqlCommand(sql,con))
    {
    SqlDataAdapter adapter = new SqlDataAdapter(com);
    adapter.Fill(tb);
    //获取Type类型
    Type type = typeof(T);
    //循环行
    for (int i = 0; i < tb.Rows.Count; i++)
    {
    //相当于实例化
    object obj = Activator.CreateInstance(type);
    for (int j = 0; j < tb.Columns.Count; j++)
    {
    PropertyInfo info = type.GetProperty(tb.Columns[j].ColumnName);
    //判断类型 int
    if (tb.Columns[j].DataType==typeof(Int32))
    {
    //判断是否有空值
    if (tb.Rows[i][j]!=null)
    {
    info.SetValue(obj, int.Parse(tb.Rows[i][j].ToString()),null);
    }
    else
    {
    info.SetValue(obj,0,null);
    }
    }
    //float
    else if (tb.Columns[j].DataType==typeof(float))
    {
    //判断值是否为空
    if (tb.Rows[i][j]!=null)
    {
    info.SetValue(obj,float.Parse( tb.Rows[i][j].ToString()),null);
    }
    else
    {
    info.SetValue(obj,0.0,null);
    }

    }
    //datatime
    else if (tb.Columns[j].DataType==typeof(DateTime))
    {
    //判断不为空
    if (tb.Rows[i][j]!=null)
    {
    info.SetValue(obj, DateTime.Parse(tb.Rows[i][j].ToString()), null);
    }
    else
    {
    info.SetValue(obj,DateTime.Now,null);
    }
    }
    //double
    else if (tb.Columns[j].DataType==typeof(double))
    {
    if (tb.Rows[i][j]!=null)
    {
    info.SetValue(obj,double.Parse(tb.Rows[i][j].ToString()),null);

    }
    else
    {
    info.SetValue(obj,0.0,null);
    }
    }
    //string
    else
    {
    if (tb.Rows[i][j]!=null)
    {
    info.SetValue(obj,tb.Rows[i][j].ToString(),null);
    }
    else
    {
    info.SetValue(obj,"",null);
    }
    }

    }
    //保险起见强转一下
    list.Add((T)obj);
    }


    }
    }

    return list;
    }

  • 相关阅读:
    Mysql与Sql Server查询数据库中表以及表字段
    linux系统常用命令
    linux tomcat安装以及配置
    mysql 5.7 设置root远程访问
    linux jdk安装
    ubuntu系统阅读CHM文档的最终解决方案
    ubuntu18.04完全卸载mysql的命令
    linux下使用cd命令进入wine容器中的windows路径
    Python中yield关键字的用法及运行逻辑
    Ubuntu18..04.2服务器版设置redis开机启动遇到的问题
  • 原文地址:https://www.cnblogs.com/kongjie/p/13137799.html
Copyright © 2011-2022 走看看