从SQL Server或asp.net/C#(mvc 3)页面将数据导入excel

本文关键字:excel 导入 数据 mvc Server SQL asp net | 更新日期: 2023-09-27 18:21:28

我需要制作一个excel文件,该文件将从与ms-sql表的连接中获取数据。目前,我正在将数据导出到xml(通过mvc 3页面),然后通过这种方式将其导出到excel中:http://xignite.web-services-blog.com/2011/03/how-to-import-market-data-into-excel-using-xml/。

我不想简单地用数据生成excel文件,因为我希望用户能够点击excel中的刷新按钮,随时获取新的数据。我的问题是,可能有多达10万行,而excel在以这种方式解析xml文件方面真的很慢,它会锁定整个cpu核心几分钟。不可能使用它。

有没有更优化的方法来实现这一点?我可以尝试直接从ms-sql中获取数据,但我不希望用户能够读取整个表——他应该只能读取"他的"行。这就是为什么目前我使用xml-我可以在链接中包括他的登录名,然后只返回他可以访问的行。如果我允许他访问ms-sql,我必须为每个客户端创建单独的登录名和视图,这将是一种自动化的痛苦。。。此外,我不确定那会快多少?

很抱歉描述不清楚——我不太确定这种将数据导入excel的方式叫什么,也找不到太多关于它的信息。

从SQL Server或asp.net/C#(mvc 3)页面将数据导入excel

如果您已经在使用web服务器生成XML文件,那么可以考虑从数据库动态生成CSV文件。然后,用户可以从此CSV文件导入数据。这将按以下方式工作:

  1. 用户打开电子表格并单击刷新
  2. 例如,用户的Excel连接到URLhttp://intranet/report.csv?username=Bob.
  3. Web服务器连接到SQL服务器并执行查询
  4. Web服务器创建一个MemoryStream ms对象
  5. Web服务器使用DataReaderSqlDataReader读取查询结果,并以CSV格式(逗号分隔值)将其写入ms
  6. Web服务器使用Content-disposition: attachment; filename=report.csv头进行响应,并使用Response.BinaryWrite()向用户发送CSV
  7. 用户的Excel接收report.csv并使用它刷新用户电子表格的内容