我在从数据库创建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;
}
答案 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));