C# 数据表到 CSV 的转换:改进的技术和调试
将 DataTable 转换为 CSV 文件需要仔细注意数据分离。 如果您的数据聚集在每行的第一个单元格中,则问题可能源于不正确的分隔符和换行符处理。
使用 StringBuilder
的原始代码的行值附加逻辑可能存在缺陷。 问题可能是逗号位置 - 它添加在 每个 值之后,而不是仅添加在每行的最后一个值之后。
这是解决此问题的代码的改进版本:
<code class="language-csharp">StringBuilder sb = new StringBuilder(); foreach (DataRow row in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { sb.Append(row[i].ToString()); if (i < dt.Columns.Count - 1) { sb.Append(","); // Add comma only before the last column } } sb.AppendLine(); // Add line break after each row } File.WriteAllText("test.csv", sb.ToString());</code>
或者,使用 LINQ(在 .NET 4.0 及更高版本中可用)的更高效、更优雅的方法如下所示:
<code class="language-csharp">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("test.csv", sb.ToString());</code>
这个基于 LINQ 的解决方案简化了列和行迭代,采用 string.Join
进行简洁的分隔符插入。 由于其可读性和效率,这种方法通常是首选。
以上是如何在 C# 中高效地将 DataTable 转换为 CSV 文件?的详细内容。更多信息请关注PHP中文网其他相关文章!