C# 把数组转换成DataSet数据类型

摘要:
-或者-对于IDispatch成员,表示DispID的字符串,例如“[DispID=3]”。InvokeAttr是一个位掩码,由指定搜索执行方法的一个或多个BindingFlags组成。Access可以是BindingFlags之一,例如Public、NonPublic、Private、InvokeMethod、GetField等。您不需要指定查找类型。如果省略了查找类型,则为BindingFlags。公共|BindingFlags。将应用实例。Binder定义一组属性并启用绑定的Binder对象。绑定可能涉及选择重载方法、强制参数类型以及通过反射调用成员-Or-如果是空引用,请使用DefaultBinder。Args包含传递给要调用的成员的参数数组。返回值表示被调用成员的返回值的对象。

/// <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。

免责声明:文章转载自《C# 把数组转换成DataSet数据类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇KVM基本功能管理截取视频第一帧图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue+elementui +input输入框关键字筛选检索表格数据展示+分页功能

第一种用axios发送请求到后台,需要后台配合,才能在表格里面渲染页面;想偷懒的小伙建议去直接粘贴复制第三种 <template> <div class="tableDatas"> <div class="searchWord"> <div style="display: inline-block"> 搜索...

linux简单命令与Shell脚本

说明1、#表示root用户登录,$表示普通用户登录2、|符号是管道符,用于把|前的输出作为后面命令的输入3、>表示追加并覆盖的意思4、>>两个大于符号,表示追加命令1、cd命令:切换目录cd /home 进入/home目录cd ../返回上一级目录cd  ./当前目录2、ls命令:产看文件及目录ls  ./ 查看当前目录所有的文件和目录l...

JQuery对数组的一些操作总结

JQuery对数组的处理非常便捷并且功能强大齐全,一步到位的封装了很多原生js数组不能企及的功能。下面来看看JQuery数组的强大之处在哪。 1.$.each(array, [callback]) 遍历 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的...

VB可变数组定义

关键点:Dim str() As string '定义redim str(n) '重设长度 or redim Preserve str(n) '重设长度,并保持原来记录不变 详细阐述:ReDim 语句 在过程级别中使用,用于为动态数组变量重新分配存储空间。 语法 ReDim [Preserve] varname(subscripts) [As type]...

java08 数组与集合

1 数组的定义与规范 一个变量只能存放一个数据,一个数组是一个容器,可以存放多个数据 数组的特点 1 数组是一种引用数据类型 2 数组中的多个数据,类型必须统一 3 数组的长度在程序运行期间,不可改变 数组的初始化 1 动态初始化  指定长度:  数据类型[] 数组名称 = new数据类型 [ 数组长度] 左侧的数据类型  表示数组中保存的数据类型 左侧...

Android 实现连续两次点击或连续多次点击退出应用

前言:日常开发过程中,经常会遇到“连续点击两次退出应用”的需求(和“连续点击多次”的需求(如:手机从设置中进入开发者选项)。 直接上代码:双击退出: private long exitTime = 0; /** * 连续点击2次退出 */ public void exitAfterTwice() {...