2014-10-30 69 views
0

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

这是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对象导出?

预先感谢您。

+0

是否有另一个线程创建/修改DataTableList或其中的项目,当你保存它们? DataSet,DataTable和相关的类不是线程安全的。也许你可以详细说明你的意思是什么“看起来,当新的DataTable对象出现时,前面的DataTable对象仍然被导出。”? – sevzas 2014-10-30 13:05:08

+0

我发现了这个问题。由于我使用“DateTime.Now”(直到秒)作为文件名,当我在同一秒内导出两个文件时,第一个导出文件被第二个导出文件覆盖。 – cblasco 2014-10-30 14:43:53

回答

0

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