1
다음은 데이터를 CSV로 내보내는 방법입니다.memorystream에서 모든 데이터를 CSV로 가져 오는 방법은 무엇입니까?
public MemoryStream ExportToCsv(string jsonData, HttpResponseBase response, string fileName)
{
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream);
try
{
String s = JsonToCsv(jsonData, ",");
writer.Write(s);
stream.Position = 0;
}
catch (Exception ex)
{
clsErrorHandling.WriteLog("CSVExport", "GenerateStreamFromString", ex.Message);
throw;
}
finally
{
writer.Flush();
writer.Close();
response.Clear();
response.Buffer = true;
response.ContentType = "application/csv";
response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + "");
response.BinaryWrite(stream.ToArray());
}
return stream;
}
}
#region Private CSV Block
private String JsonToCsv(string jsonData, string delimiter)
{
try
{
using (StringWriter swObj = new StringWriter())
{
using (var csv = new CsvWriter(swObj))
{
csv.Configuration.SkipEmptyRecords = true;
csv.Configuration.WillThrowOnMissingField = false;
csv.Configuration.Delimiter = delimiter;
using (var dt = jsonStringToTable(jsonData))
{
foreach (DataColumn col in dt.Columns)
{
csv.WriteField(col.ColumnName);
}
csv.NextRecord();
foreach (DataRow row in dt.Rows)
{
for (var i = 0; i < dt.Columns.Count; i++)
{
csv.WriteField(row[i]);
}
csv.NextRecord();
}
}
}
return swObj.ToString();
}
}
catch (Exception ex)
{
clsErrorHandling.WriteLog("CSVExportHandler", "JsonToCsv", ex.Message);
return null;
}
}
private DataTable jsonStringToTable(string jsonContent)
{
DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsonContent);
return dt;
}
#endregion
레코드 수가 100 개 미만인 경우 문제가 없습니다. 그러나 데이터가 100 또는 150+ 일 때 마지막 15-20 레코드는 CSV 파일에 기록되지 않습니다.
레코드 수가 175면 약 csv가 약 163가됩니다. 레코드 수가 150면 csv arounf 131 & 등이됩니다.
무엇이 원인 일 수 있습니까? 어떻게해야합니까?
왜 writer.Flush()와 writer.Close을() 주석습니까? 이 shloud StreamStream의 내부 버퍼를 MemoryStream으로 플러시하고 문제를 해결하십시오. –
@ Àuuf, 나는 단지 주석을 달았지만 여전히 같은 문제에 체크했다. –
그래서 나는 그것을 보지 않지만 이것과 비슷한 문제가 하나 더 있습니다. swObj.ToString()이 모든 레코드를 반환하는지 확인할 수 있습니까? 이렇게하면 문제가 ExportToCsv() 또는 JsonToCsv()에 있는지 여부를 알 수 있습니다. –