在 C# 中创建 CSV,缺少逗号并将每个值放在新行上

本文关键字:新行 创建 CSV | 更新日期: 2023-09-27 18:30:46

我在从数据库创建 csv 文件时遇到问题。

基本上正在发生的事情是每个值都添加到它自己的行上,没有逗号。

它应该看起来像这样:

ColumnValue1, ColumnValue2, ColumnValue3, ColumnValue4
ColumnValue1, ColumnValue2, ColumnValue3, ColumnValue4

但我得到这个:

ColumnValue1
ColumnValue2
ColumnValue3
ColumnValue4
ColumnValue1
ColumnValue2
ColumnValue3
ColumnValue4

更新:输入的值是日期时间 (11/17/2014 12:00:00:000) 整数、国际和字符串

这是我的代码示例:

private string GenerateCSV(string fileLocation)
{
    string filePath = Path.Combine(fileLocation, "filename.csv");
    var csvList = new List<String>();
    StringBuilder sb = new StringBuilder();
    if (File.Exists(filePath))
    {
        File.Delete(filePath);
    }
    try
    {
        using (FileStream stream = File.OpenWrite(filePath))
        using (IDbCommand command = new SqlCommand("Example command") { CommandTimeout = 0  })
        using (IDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    csvList.Add(Convert.ToString(reader[i]));
                }
            }
        }
    }
    catch (Exception e)
    {
        m_Log.Error("{0}", e);
    }
    for (int index = 0; index < csvList.Count; index++)
    {
        sb.AppendLine(string.Join(",", csvList[index]));
    }
    File.AppendAllText(filePath, sb.ToString());
    return filePath;
}

在 C# 中创建 CSV,缺少逗号并将每个值放在新行上

当您进入for (int index = 0; index < csvList.Count; index++)循环时,csvList包含reader浏览过的所有记录中的字段值 - 作为单独的项目。然后你调用string.Join它需要一个字符串数组作为第二个参数,但满足于将字符串csvList[index]使其成为具有单个项目的字符串数组。因此,这里没有什么可以与","连接的,csvList[index]只是AppendLine ed 到 StringBuilder

while (reader.Read())
{
  List<string> fields = new List<string>();
  for (int i = 0; i < reader.FieldCount; i++)
  {
    fields.Add(Convert.ToString(reader[i]));
  }
  csvList.Add(string.Join(",", fields.ToArray());
}
for (int index = 0; index < csvList.Count; index++)
{
  sb.AppendLine(csvList[index]);
}

而不是

for (int index = 0; index < csvList.Count; index++)
    {
        sb.AppendLine(string.Join(",", csvList[index]));
    }

sb.AppendLine(string.Join(",", csvList));