Reputation: 221
I have a C# Data Table with about one million rows with 20 columns I need to export this to csv , i tried string builder but page keep loading
public ActionResult DownloadExcel()
{
System.Data.DataTable result = Helpers.TaxMailingExcelBuilder.Export();
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=myData.csv");
Response.Charset = "";
Response.ContentType = @"application/text";
Response.Output.Write(ExportDataTable(result).ToString());
Response.Flush();
Response.End();
return View();
}
private StringBuilder ExportDataTable(System.Data.DataTable dt)
{
var stringBuilder = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
stringBuilder.Append(dt.Rows[i][j].ToString() + ',');
}
stringBuilder.Append("rn");
}
return stringBuilder;
}
}
page keep loading without any progress
Upvotes: 0
Views: 1249
Reputation: 34421
I would return a StringWriter like code below
private StringWriter ExportDataTable(DataTable dt)
{
StringWriter writer = new StringWriter();
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToArray();
writer.WriteLine(string.Join(",", columnNames));
foreach(DataRow row in dt.AsEnumerable())
{
writer.WriteLine(string.Join(",", row.ItemArray.Select(x => x.ToString())));
}
return writer;
}
Upvotes: 1