2014-10-30 51 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」(直到秒)作爲文件名,當我在同一秒內導出兩個文件時,第一個導出文件被第二個導出文件覆蓋。

相關問題