基于此处的另一个答案,这是一种将 DataTable 转换为 CSV 输出并将列名添加为输出中的第一行的方法:
public static string DataTableToCsv(DataTable table)
{
string result = string.Empty;
StringBuilder resultBuilder = new StringBuilder();
if (table != null && table.Rows != null && table.Columns != null && table.Columns.Count > 0)
{
int lastItemIndex = table.Columns.Count - 1;
int index = 0;
foreach (DataColumn column in table.Columns)
{
resultBuilder.Append(column.ColumnName);
if (index < lastItemIndex) // if not the last element in the row
resultBuilder.Append(", "); // add the separator
index++;
}
resultBuilder.AppendLine(); // add a CRLF after column names row
foreach (DataRow dataRow in table.Rows)
{
lastItemIndex = dataRow.ItemArray.Length - 1;
index = 0;
foreach (object item in dataRow.ItemArray)
{
resultBuilder.Append(item);
if (index < lastItemIndex) // if not the last element in the row
resultBuilder.Append(", "); // add the separator
index++;
}
resultBuilder.AppendLine(); // add a CRLF after each data row
}
result = resultBuilder.ToString();
}
return result;
}
使用示例:
DataTable table = new DataTable();
....
Console.WriteLine(DataTableToCsv(table));
请注意,此方法不能正确处理(即转义)包含引号或逗号的数据。但它应该足以作为一种快速而肮脏的方式将数据表转储到控制台或其他任何地方进行查看。