zoukankan      html  css  js  c++  java
  • C# 将一个DataTable分解成多个DataTable

         今天在做项目时需要将一个DataTable分解成多个DataTable分批传入函数里面,于是在网上找寻了一番,修复了  存在分表的缺陷的代码。

       分表方法:

            /// <summary>
            /// 分解数据表
            /// </summary>
            /// <param name="originalTab">需要分解的表</param>
            /// <param name="rowsNum">每个表包含的数据量</param>
            /// <returns></returns> 
            public static DataSet SplitDataTable(DataTable originalTab, int rowsNum)
            {
    
                int tableNum = System.Convert.ToInt32(originalTab.Rows.Count / rowsNum); //相除取整
                int remainder = System.Convert.ToInt32(originalTab.Rows.Count % rowsNum); //相除取余数
                DataSet ds = new DataSet();
                //if one table is big enough to store, use one table
                if (tableNum == 0)
                {
                    ds.Tables.Add(originalTab);
                }
                else
                {
    
                    if (remainder > 0) //如果有余数,需要多一张表存余数
                    {
                        tableNum++;
                    }
    
                    DataTable[] tableSlice = new DataTable[tableNum - 1 + 1];
    
                    //Save orginal columns into new table
                    int c = 0;
                    for (c = 0; c <= (tableNum - 1); c++)
                    {
                        tableSlice[c] = new DataTable();
                        foreach (DataColumn dc in originalTab.Columns)
                        {
                            tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType);
                        }
                    }
    
                    //Import Rows
                    int i = 0;
                    if (remainder > 0)
                    {
                        for (i = 0; i <= (tableNum - 1); i++)
                        {
                            //if the current table is not the last table
                            if (i != tableNum - 1)
                            {
                                int j = 0;
                                for (j = i * rowsNum; j <= (((i + 1) * rowsNum) - 1); j++)
                                {
                                    tableSlice[i].ImportRow(originalTab.Rows[j]);
                                }
                            }
                            else
                            {
                                int k = 0;
                                //For k = i * rowsNum To (((i + 1) * rowsNum + remainder) - 1)
                                for (k = i * rowsNum; k <= ((i * rowsNum + remainder) - 1); k++)
                                {
                                    tableSlice[i].ImportRow(originalTab.Rows[k]);
                                }
                            }
                        }
                    }
                    else
                    {
                        for (i = 0; i <= (tableNum - 1); i++)
                        {
                            int j = 0;
                            for (j = i * rowsNum; j <= (((i + 1) * rowsNum) - 1); j++)
                            {
                                tableSlice[i].ImportRow(originalTab.Rows[j]);
                            }
                        }
                    }
    
                    //Add all tables into a dataset
                    foreach (DataTable dt in tableSlice)
                    {
                        ds.Tables.Add(dt);
                    }
                }
    
                return ds; 
            }

       

  • 相关阅读:
    Redis分布式锁解决抢购问题
    Linux查看进程,端口,服务路径等
    执行jar包,输出信息到文件
    查看linux服务器信息
    IDEA将项目打包为指定class文件的jar
    RSA加密-解密以及解决超长内容加密失败解决
    win10 Snipaste 截图软件
    线程池参数详解
    本地连接Linux工具
    python安装
  • 原文地址:https://www.cnblogs.com/wofeiliangren/p/13157701.html
Copyright © 2011-2022 走看看