.net将一个DataTable拆分成n个DataTable

来源:互联网 发布:怎么下载网络视频 编辑:程序博客网 时间:2024/05/17 00:59

C#

/// <summary>        /// 分解数据表        /// </summary>        /// <param name="originalTab">需要分解的表</param>        /// <param name="rowsNum">每个表包含的数据量</param>        /// <returns></returns>        public DataSet SplitDataTable(DataTable originalTab, int rowsNum)        {                        //获取所需创建的表数量            int tableNum = originalTab.Rows.Count / rowsNum;            //获取数据余数            int remainder = originalTab.Rows.Count % rowsNum;                        DataSet ds = new DataSet();            //如果只需要创建1个表,直接将原始表存入DataSet            if (tableNum == 0)            {                ds.Tables.Add(originalTab);            }            else            {                DataTable[] tableSlice = new DataTable[tableNum];                            //Save orginal columns into new table.                            for (int c = 0; c<tableNum; c++)                {                    tableSlice[c] = new DataTable();                    foreach(DataColumn dc in originalTab.Columns)                    {                                            tableSlice[c].Columns.Add(dc.ColumnName,dc.DataType);                                        }                }                                                                            //Import Rows                for (int i = 0; i < tableNum; i ++)                {                    // if the current table is not the last one                    if (i != tableNum -1)                    {                        for(int j = i*rowsNum ; j < ((i+1)*rowsNum); j++)                        {                            tableSlice[i].ImportRow(originalTab.Rows[j]);                        }                    }                    else                    {                        for(int k = i*rowsNum ; k < ((i+1)*rowsNum+remainder); k++)                        {                            tableSlice[i].ImportRow(originalTab.Rows[k]);                        }                    }                }                                        //add all tables into a dataset                                foreach(DataTable dt in tableSlice)                {                    ds.Tables.Add(dt);                }            }            return ds;        }
以上代码还有点小小的问题,如果需要拆分表的数据不能整除新表包含的数据,上述代码会缺少最后一张表,需要自己适当修改代码。


VB.Net

Public Shared Function SplitDataTable(ByVal originalTab As DataTable, ByVal rowsNum As Integer) As DataSet        Dim tableNum As Integer = originalTab.Rows.Count \ rowsNum    '相除取整        Dim remainder As Integer = originalTab.Rows.Count Mod rowsNum  '相除取余数        Dim ds As DataSet = New DataSet        'if one table is big enough to store, use one table        If tableNum = 0 Then            ds.Tables.Add(originalTab)        Else            If remainder > 0 Then   '如果有余数,需要多一张表存余数                tableNum = tableNum + 1            End If            Dim tableSlice(tableNum - 1) As DataTable            'Save orginal columns into new table            Dim c As Integer            For c = 0 To (tableNum - 1)                tableSlice(c) = New DataTable                For Each dc As DataColumn In originalTab.Columns                    tableSlice(c).Columns.Add(dc.ColumnName, dc.DataType)                Next            Next            'Import Rows            Dim i As Integer            If remainder > 0 Then                For i = 0 To (tableNum - 1)                    'if the current table is not the last table                    If i <> tableNum - 1 Then                        Dim j As Integer                        For j = i * rowsNum To (((i + 1) * rowsNum) - 1)                            tableSlice(i).ImportRow(originalTab.Rows(j))                        Next                    Else                        Dim k As Integer                        'For k = i * rowsNum To (((i + 1) * rowsNum + remainder) - 1)                        For k = i * rowsNum To ((i * rowsNum + remainder) - 1)                            tableSlice(i).ImportRow(originalTab.Rows(k))                        Next                    End If                Next            Else                For i = 0 To (tableNum - 1)                    Dim j As Integer                    For j = i * rowsNum To (((i + 1) * rowsNum) - 1)                        tableSlice(i).ImportRow(originalTab.Rows(j))                    Next                Next            End If            'Add all tables into a dataset                    For Each dt As DataTable In tableSlice                ds.Tables.Add(dt)            Next        End If        Return ds        'SplitDataTable = ds    End Function

vb.net的代码我已适当修改,已经过验证正确,大家可以放心使用。

使用如下:

 Dim ds As DataSet = SplitDataTable(pdt, 200)    '新的DataTable为200条数据 If ds.Tables.Count > 0 Then   For i As Integer = 0 To ds.Tables.Count - 1      newDt = ds.Tables(i)   '循环DataSet里面的每张DataTable表      '此处是对每个新DataTable表的操作   next End IF 






0 0
原创粉丝点击