@AMER SAID , Welcome to Microsoft Q&A, you could try to split your current datatable into many datatables.
Here is a code example you could refer to.
static void Main(string[] args)
{
DataTable table= new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Age");
table.Columns.Add("Id");
for (int i = 0; i < 100; i++)
{
table.Rows.Add("test1", 22, 1001);
}
var list = SplitTable(table, 30);
int m = 1;
foreach (var item in list)
{
ExportDataTabletoFile(item, ";", true, "test"+m+".txt");
m++;
}
}
private static List<DataTable> SplitTable(DataTable originalTable, int batchSize)
{
List<DataTable> tables = new List<DataTable>();
int i = 0;
int j = 1;
DataTable newDt = originalTable.Clone();
newDt.TableName = "Table_" + j;
newDt.Clear();
foreach (DataRow row in originalTable.Rows)
{
DataRow newRow = newDt.NewRow();
newRow.ItemArray = row.ItemArray;
newDt.Rows.Add(newRow);
i++;
if (i == batchSize)
{
tables.Add(newDt);
j++;
newDt = originalTable.Clone();
newDt.TableName = "Table_" + j;
newDt.Clear();
i = 0;
}
}
if (newDt.Rows.Count > 0)
{
tables.Add(newDt);
j++;
newDt = originalTable.Clone();
newDt.TableName = "Table_" + j;
newDt.Clear();
}
return tables;
}
public static void ExportDataTabletoFile(DataTable datatable, string delimited, bool exportcolumnsheader, string file)
{
StreamWriter str = new StreamWriter(file, false, System.Text.Encoding.Default);
if (exportcolumnsheader)
{
string Columns = string.Empty;
foreach (DataColumn column in datatable.Columns)
{
Columns += column.ColumnName + delimited;
}
str.WriteLine(Columns.Remove(Columns.Length - 1, 1));
}
foreach (DataRow datarow in datatable.Rows)
{
string row = string.Empty;
foreach (object items in datarow.ItemArray)
{
row += items.ToString() + delimited;
}
str.WriteLine(row.Remove(row.Length - 1, 1));
}
str.Flush();
str.Close();
}
For example, I have a datatable has 100 rows. I split the current datatable into 4 datatables, the three datatables have 30 rows and the left has 10 rows.
Tested result:
Hope my code could help you.
Best Regards,
Jack