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

从SQL Server或asp.net/C#(mvc 3)页面将数据导入excel,c#,sql-server,excel,C#,Sql Server,Excel,我需要制作一个excel文件,它将从连接到ms sql表的连接中获取数据。目前,我正在将数据导出到xml(通过mvc 3页面),然后通过以下方式将其导入excel: 我不想简单地用数据生成excel文件,因为我希望用户能够在excel中点击刷新按钮,随时获取新的数据。我的问题是,可能有多达100000行,而excel在解析xml文件时速度非常慢,这种方式会将整个cpu核心锁定几分钟。使用它是不可能的 有没有更优化的方法来实现这一点?我可以尝试直接从ms sql获取数据,但我不希望用户能够读取整个

我需要制作一个excel文件,它将从连接到ms sql表的连接中获取数据。目前,我正在将数据导出到xml(通过mvc 3页面),然后通过以下方式将其导入excel:

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

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


对不起,由于描述不清楚,我不确定调用Excel导入数据的方式是什么,而且也不能真正找到它。

< P>如果您已经使用Web服务器生成XML文件,那么考虑从数据库中立即生成CSV文件。然后,用户可以从此CSV文件导入数据。其工作如下:

  • 用户打开电子表格并单击刷新
  • 比如说,用户的Excel连接到一个URL
  • Web服务器连接到SQL server并执行查询
  • Web服务器创建一个
    MemoryStream ms
    对象
  • Web服务器使用
    DataReader
    SqlDataReader
    读取查询结果,并以CSV格式(逗号分隔的值)将其写入
    ms
  • Web服务器响应
    内容配置:附件;filename=report.csv
    标题并使用
    Response.BinaryWrite()
    将csv发送给用户
  • 用户的Excel接收report.csv并使用它刷新用户电子表格的内容