将大数据导出为xls格式:系统内存不足异常

时间:2016-08-01 12:43:55

标签: c# asp.net sql-server export-to-excel

我将大型DataTable导出为Excel工作表(.xls)格式。我在这里调用存储过程,它返回DataTable。存储过程用于返回7,50,000行,包含93列。

在后端,如果我传递存储过程的参数,则需要8分钟才能完成该过程,因为这是一个很长的过程。

但是当我从前端调用程序时,将记录分配给DataTable," System Out Of Memory"异常发生。

所以当我谷歌时,我才知道这是因为它的大小超过了服务器的RAM大小,所以它抛出了这个异常。 当我导出小型DataTable时,它可以正常工作。

这种替代方法是什么?有人建议我。以下是我的代码,

C#:

            DataTable dt = BindDatatable();
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MBQ_Auto.xls"));
            Response.ContentType = "application/ms-excel";
            //Response.ContentType = "application/octet-stream";
            //Response.ContentType = "text/tab-separated-values";
            string str = string.Empty;
            foreach (DataColumn dtcol in dt.Columns)
            {
                Response.Write(str + dtcol.ColumnName);
                str = "\t";
            }
            Response.Write("\n");
            int rowCount = 0;
            foreach (DataRow dr in dt.Rows)
            {
                str = "";
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    Response.Write(str + Convert.ToString(dr[j]));
                    str = "\t";
                }
                Response.Write("\n");
                if (unchecked(++rowCount % 1024 == 0))
                    Response.Flush();
            }
            Response.End();

1 个答案:

答案 0 :(得分:1)

您不应该将DataTable用于此类问题。 DataTable将整个数据存储在内存中。

您应该使用 DataReader 从数据库中获取行。