zoukankan      html  css  js  c++  java
  • C# 把数组转换成DataSet数据类型

    /// <summary>
        /// 将数组转换成DataSet的类
        /// </summary>
        class ArrayTransformDataSet
        {
            /// <summary>
            /// 获取转换后的DataSet
            /// </summary>
            /// <param name="obj">数组对象</param>
            /// <returns>DataSet类型</returns>
            public static DataSet GetDataSet(object[] obj)
            {
                if (obj == null)
                {
                    //先判断数组是否为空
                    return null;
                }
                else
                {
                    return GetProperties(obj);
                }
            }
            /// <summary>
            /// 设置表头
            /// </summary>
            /// <param name="obj">数组对象</param>
            /// <returns>DataSet类型</returns>
            private static DataSet GetProperties(object[] obj)
            {
                Type t=obj[0].GetType();
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                ds.Tables.Add(dt);
                PropertyInfo[] properties = t.GetProperties();
                foreach (PropertyInfo pro in properties)
                {
                    dt.Columns.Add(new DataColumn(pro.Name, pro.PropertyType));
                }
                return GetAllData(ds, obj, t);
            }
            /// <summary>
            /// 填充DataSet
            /// </summary>
            /// <param name="ds">没有数据的DataSet</param>
            /// <param name="obj">数组对象</param>
            /// <param name="t">数组中第一组的类型</param>
            /// <returns>DataSet类型</returns>
            private static DataSet GetAllData(DataSet ds, object[] obj,Type t)
            {
                DataColumnCollection collection = ds.Tables[0].Columns;
                foreach (object var in obj)
                {
                    DataRow dr = ds.Tables[0].NewRow();
                    for (int i = 0; i < collection.Count; i++)
                    {
                        dr = t.InvokeMember(collection.ColumnName, BindingFlags.GetProperty, null, var, null);
                    }
                    ds.Tables[0].Rows.Add(dr);
                }
                return ds;
            }


    C#ObjectInvokeMember(stringname,BindingFlagsinvokeAttr,Binderbinder,Objecttarget,Object[]args)参数
    nameString,它包含要调用的构造函数、方法、属性或字段成员的名称。
    - 或 -
    空字符串 (""),表示调用默认成员。
    - 或 -
    对于 IDispatch 成员,一个表示 DispID 的字符串,例如“[DispID=3]”。
    invokeAttr一个位屏蔽,由一个或多个指定搜索执行方式的BindingFlags组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public |BindingFlags.Instance。
    binder一个Binder对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
    - 或 -
    若为空引用(在 Visual Basic 中为 Nothing),则使用DefaultBinder。
    target要在其上调用指定成员的Object。
    args包含传递给要调用的成员的参数的数组。


    返回值表示被调用成员的返回值的 Object。

  • 相关阅读:
    编程思想之正则表达式
    SQL查询顺序
    hibernate inverse属性的作用
    介绍一下Hibernate的二级缓存
    JSON数据
    你没玩过的全新版本!Win10这些骚操作你知多少
    VSCode 小鸡汤 第01期
    Editor REST Client
    k8s常用命令
    【项目3-2】多肉植物网站
  • 原文地址:https://www.cnblogs.com/Mancy/p/2695100.html
Copyright © 2011-2022 走看看