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