从SQL Server 2012导出大量的行到Excel

我意识到这是一个很好的主题,但看了很多post后,我正在寻找一个不同的解决scheme。 该应用程序是ac#web,.net框架4.5应用程序,并需要从SQL Server 2012数据库导出大约80,000 +行到Excel电子表格模板(使其看起来很漂亮,格式化),并将其stream式传输给用户下载。

我意识到一个答案可能是重新问为什么我们需要这样做,并find一种替代方法。 应用程序正在审查众多的金融交易。 用户希望保留在Excel中导出和播放数据的能力。 在我开始寻找替代方法来帮助他们之前,我想看看有没有人有什么好的想法!

当前的解决scheme循环访问数据,并使用OpenXML库生成XML。 虽然这对于较小的数据集运行良好,但对于较大的数据集来说,这需要很长时间。

有没有其他创buildExcel文件,没有:

  1. 通过某种数据传输对象将数据库中的所有数据从数据库中提取到应用程序中,这种数据传输对象传输大量数据的速度慢。
  2. 使用需要许可的第三方组件,因为没有预算。
  3. 使用OpenXml遍历所有行并生成完整的输出。
  4. 由于存在数据安全限制,因此在networking驱动器上生成并存储物理文件。
  5. 使用SSRS

我正在思考使用SQL Server来生成内存中的Excel文件(通过SSIS),从应用程序打开一个stream,通过OpenXml或别的东西编辑格式,然后将文件stream式传输给用户。 不确定这是可能的还是有其他select?

您可以尝试这种方法,但当然涉及从数据库中提取数据到应用程序。

Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=YourFileName.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; using (StringWriter sw = new StringWriter()) { HtmlTextWriter hw = new HtmlTextWriter(sw); FileInfo fi = new FileInfo(Server.MapPath("~/App_Themes/YourCSS.css")); StringBuilder sb = new StringBuilder(); StreamReader sr = fi.OpenText(); while (sr.Peek() >= 0) sb.Append(sr.ReadLine()); sr.Close(); sb.Append(" table.tnew tr { height: 20px; } "); sb.Append(" table.tnew tr td, th { border:1px solid #CCCCCC; } "); sb.Append(" table.tnew tr.RowTotale td { background-color:#F5F5F5; color: #333333; text-transform:uppercase; font-weight: bold; font-size:11px; } "); GridView gv = new GridView(); gv.DataSource = YourDataSource; gv.DataBind(); gv.RenderControl(hw); Response.Output.Write(string.Format("<html><head><style type='text/css'>{0}</style></head><body>{1}</body></html>", sb.ToString(), sw.ToString()); Response.Flush(); Response.End(); } 

正如你所看到的,你甚至可以添加你的CSS文件和其他样式。