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

在C#中创建CSV,缺少逗号并将每个值放在新行上,c#,sql-server,csv,ado.net,C#,Sql Server,Csv,Ado.net,我在从数据库创建csv文件时遇到问题 基本上,每个值都被添加到它自己的行中,没有逗号 应该是这样的: ColumnValue1, ColumnValue2, ColumnValue3, ColumnValue4 ColumnValue1, ColumnValue2, ColumnValue3, ColumnValue4 但我明白了: ColumnValue1 ColumnValue2 ColumnValue3 ColumnValue4 ColumnValue1 ColumnValue2 Col

我在从数据库创建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;
}
private string GenerateCSV(字符串文件位置)
{
字符串filePath=Path.Combine(fileLocation,“filename.csv”);
var csvList=新列表();
StringBuilder sb=新的StringBuilder();
if(File.Exists(filePath))
{
File.Delete(文件路径);
}
尝试
{
使用(FileStream-stream=File.OpenWrite(filePath))
使用(IDbCommand=newSQLCommand(“示例命令”){CommandTimeout=0})
使用(IDataReader=command.ExecuteReader())
{
while(reader.Read())
{
对于(int i=0;i
当您进入
for(int index=0;index
循环时,
csvList
包含
reader
已通过的所有记录的字段值-作为单独的项。然后调用
string.Join
,它需要一个字符串数组作为第二个参数,但它的内容是将
csvList[index]
string与单个项合并成一个字符串数组。因此,这里没有什么可加入的“,”,而
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]);
}
while(reader.Read())
{
列表字段=新列表();
对于(int i=0;i
而不是

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

我看不出为什么你发布的代码每行会输出一个以上的项目。如果你看不懂代码,请考虑仔细的调试。注意,你只应该使用现有的CSV读写器,而不是发明你自己的(除非是家庭作业)。
sb.AppendLine(string.Join(",", csvList));