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

时间:2014-11-18 00:29:38

标签: c# sql-server csv ado.net

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

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

应该看起来像这样:

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

但我得到了这个:

ColumnValue1
ColumnValue2
ColumnValue3
ColumnValue4
ColumnValue1
ColumnValue2
ColumnValue3
ColumnValue4

更新:输入的值是DateTime(11/17/2014 12:00:00:000)Int,Int和String

以下是我的代码示例:

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;
}

2 个答案:

答案 0 :(得分:0)

当您进入for (int index = 0; index < csvList.Count; index++)循环时,csvList包含reader所有记录中的字段值 - 作为单独的项目。然后你调用string.Join,它需要一个字符串数组作为第二个参数,但是要将csvList[index]字符串转换为带有单个项目的字符串数组。因此,此处没有任何内容可以加入“,”,而csvList[index]只是AppendLine加入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]);
}

答案 1 :(得分:0)

而不是

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

使用

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