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

时间:2014-10-30 11:25:11

标签: c# csv datatable export

我想使用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对象而不会减慢进程?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

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