导出SQL Server到Excel – post太多?

我正在使用这个函数从我的SQL Server查询中创build一个Excel文件

DataTable dt = new DataTable(); SqlConnection objcon = new SqlConnection(connectionString); string sql = "My SELECT SQL"; SqlDataAdapter objda = new SqlDataAdapter(sql, objcon); objda.Fill(dt); GridView gvreport = new GridView(); gvreport.DataSource = dt; gvreport.DataBind(); string fileName = string.Format("fileNameHere"); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=" + fileName); Response.ContentType = "application/excel"; System.IO.StringWriter sw = new System.IO.StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); gvreport.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); return null; 

直到我现在意识到,它试图写超过11000行时效果不佳,这工作得很好。

Excel文件本身很好,但在大约11,000行之后,它在一个之后突然中断,之后所有的行都是空的。 行本身仍然“创造”与边界和一切,但他们都是空白的。

任何想法是什么造成这个? 还是有没有更好的方法来创build这样的Excel文件?

那么,在你的情况下,你实际上并没有生成一个真正的Excel文件,只是简单的HTML,并告诉Excel打开它并将其转换。 使用OpenOffice或LibreOffice或任何其他实际需要真正Excel文件的工具,您可能会遇到其他问题。

我会研究一个更强大的解决scheme,直接使用OpenXml ,或通过ClosedXml或其他类似的组件间接使用。

例如,如果您要使用ClosedXml,则可以这样做:

 var wb = new XLWorkbook(); var dataTable = GetTable("Information"); // Add a DataTable as a worksheet wb.Worksheets.Add(dataTable); wb.SaveAs("AddingDataTableAsWorksheet.xlsx"); 

摘录自: https : //closedxml.codeplex.com/wikipage? title = Adding%20DataTable%20as%20Worksheet

但是,在你的情况下,而不是保存到一个物理文件,你会直接输出stream到响应。