Bassem
Bassem

Reputation: 221

Export datatable with 1 million records to csv

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

Answers (1)

jdweng
jdweng

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

Related Questions