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對象導出?
預先感謝您。
是否有另一個線程創建/修改DataTableList或其中的項目,當你保存它們? DataSet,DataTable和相關的類不是線程安全的。也許你可以詳細說明你的意思是什麼「看起來,當新的DataTable對象出現時,前面的DataTable對象仍然被導出。」? – sevzas 2014-10-30 13:05:08
我發現了這個問題。由於我使用「DateTime.Now」(直到秒)作爲文件名,當我在同一秒內導出兩個文件時,第一個導出文件被第二個導出文件覆蓋。 – cblasco 2014-10-30 14:43:53