首页 > 解决方案 > 将包含 100 万条记录的数据表导出到 csv

问题描述

我有一个 C# 数据表,其中包含大约 100 万行和 20 列我需要将其导出到 csv,我尝试了字符串生成器,但页面一直在加载

 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;
        }
    }

页面继续加载没有任何进展

标签: c#asp.net-mvcexport-to-csv

解决方案


我会像下面的代码一样返回一个 StringWriter

       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;

        }

推荐阅读