将数据集转换为文本文件选项卡分隔文件

时间:2011-06-07 02:10:41

标签: c# dataset text-files

我有一个DataSet。我想将数据集列作为标题和行数据转换为制表符分隔文本文件。

我有什么技巧可以做到最后还是我必须手动循环?

真诚地感谢, - Sel

3 个答案:

答案 0 :(得分:5)

private static string GetTextFromDataTable(DataTable dataTable)
{
    var stringBuilder = new StringBuilder();
    stringBuilder.AppendLine(string.Join("\t", dataTable.Columns.Cast<DataColumn>().Select(arg => arg.ColumnName)));
    foreach (DataRow dataRow in dataTable.Rows)
        stringBuilder.AppendLine(string.Join("\t", dataRow.ItemArray.Select(arg => arg.ToString())));
    return stringBuilder.ToString();
}

用法:

var text = GetTextFromDataTable(dataSet.Tables[0]);
File.WriteAllText(filePath, text);

答案 1 :(得分:4)

导出到XML内置,但导出为CSV,您可以使用以下代码 - 来自http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d2071fd4-8c7d-4d0e-94c3-9586df754df8/

这只会写入数据,而不是列,您需要首先循环列标题..

编辑:更新以包含列名...我还没有运行这个,这是上面链接的编辑,所以它可能有效也可能无效,但概念在这里 < / p>

StringBuilder str = new StringBuilder(); 
    // get the column headers
foreach (var c in NorthwindDataSet.Customers.Columns) { 
  str.Append("\"" + c.ColumnName.ToString() + "\"\t"); 
} 
str.Append("\r\n");

    // write the data here
foreach (DataRow dr in this.NorthwindDataSet.Customers) { 
 foreach (var field in dr.ItemArray) { 
   str.Append("\"" + field.ToString() + "\"\t"); 
 } 
 str.Append("\r\n");
} 
try { 
 My.Computer.FileSystem.WriteAllText("C:\\temp\\testcsv.csv", str.ToString(), false); 
} catch (Exception ex) { 
 MessageBox.Show("Write Error"); 
}

答案 2 :(得分:0)

请注意,您需要使用Linq才能使此解决方案正常工作。将以下using语句添加到您的代码中:

using System.Linq;