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;
    }

  • 相关阅读:
    ASP.NET2.0 Provider模型
    平时可以上一上的SQL Server的网站
    有关SQL server connection KeepAlive 的FAQ(1)
    有关SQL server connection Keep Alive 的FAQ(2)
    使用C#的is和as操作符来转型
    BlogEngine学习系列
    复习asp.net form验证
    C#学习之动态化dynamic
    Altium Designer(Protel)网络连接方式Port和Net Label详解
    Altium Designer生成Gerber文件和钻孔文件的一般步骤
  • 原文地址:https://www.cnblogs.com/kongjie/p/13137799.html
Copyright © 2011-2022 走看看