将几个DataTable对象导出到不同的.csv文件中

本文关键字:csv 文件 几个 对象 DataTable | 更新日期: 2023-09-27 18:28:29

我想使用foreach循环和方法"WriteDataTable"将不同的DataTable对象导出到不同的.csv文件中。Datatable对象的大小非常小(只有15列和2行)。

这是foreach循环:

foreach (var dt in DataTableList)
{
    // Name of the file
    string fileName = DateTime.Now.Year.ToString();
    // Call method
    WriteDataTable(fileName, dt);
}

这是一种方法:

public void WriteDataTable(string fileName, DataTable dt)
{  
    StringBuilder sb = new StringBuilder();
    IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>()
                                                .Select(column => column.ColumnName);
    sb.AppendLine(string.Join(";", columnNames));
    foreach (DataRow row in dt.Rows)
    {
        IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
        sb.AppendLine(string.Join(";", fields));
    }
    File.WriteAllText(fileName, sb.ToString());            
}

程序运行正常,但只有部分DataTable对象真正导出。当新的DataTable对象出现时,看起来上一个DataTable对象仍在导出中。如果我使用"Thread.Sleep(500)"暂停进程,则导出所有对象:

foreach (var dt in DataTableList)
{
    // Name of the file
    string fileName = DateTime.Now.Year.ToString();
    // Call method
    WriteDataTable(fileName, dt);
    // Pause the process
    Thread.Sleep (500);
}

有没有任何建议可以在不减慢进程的情况下导出所有DataTable对象?。

提前谢谢。

将几个DataTable对象导出到不同的.csv文件中

我发现了问题。由于我使用"DateTime.Now"(直到秒)作为文件名,当我在同一秒内导出两个文件时,第一个导出文件会被第二个文件覆盖。