【问题标题】:Is there is any better way to export bulk data into excel using C# or SQL Server?有没有更好的方法使用 C# 或 SQL Server 将批量数据导出到 excel 中?
【发布时间】:2016-04-15 12:38:25
【问题描述】:

我的应用程序中有一个搜索页面,可以根据两个日期搜索数据。用户还可以将数据导出到excel中。我正在使用普通的 asp.net 网格视图来显示数据。在导出到 excel 时,我使用 OPENROWSET 方法从 sqlserver 将数据插入到 excel 中(这有时会引发链接服务器 null 错误,是否在各种技术站点中给出了所有建议,但有时仍会出现错误)。

当用户将一年的数据导出到 excel 中时,即使查询返回数据更快,页面也需要至少 20 分钟才能导出,使用 openrowset 写入 excel 需要更多时间。 1年的数据大约有200万条记录,之前我使用c#代码将数据写入excel也需要更多时间。一年数据的 excel 文件大小超过 200 mb。

批量数据excel导出有没有更好的方法?

【问题讨论】:

  • “200 万记录”? 2,000,000 行无法放入一张 Excel 工作表中。
  • lakhs 既不是英语单词也不是编程术语。在任何情况下,如果您必须导出这么多数据,就会出现问题 - 用户应该使用 数据库 来处理数据,而不是导出它们并自己处理它们。无论如何,在这种情况下,最好使用 PowerQuery 或 PowerPivot 连接创建 Excel 工作表并让用户自己检索数据
  • @AxelRichter 取决于 - 使用 PowerPivot Excel 可以加载更多用于处理、聚合等。它仍然无法显示更多行。
  • 没有人会查看 200 万行,即使 Excel 可以全部显示。只需在视图中的服务器内部进行聚合,并在 Excel 内部设置数据源以访问它。
  • 您需要考虑改为离线模型。用户提出请求。不等待。离线创建文件...通过电子邮件向用户发送指向可以下载的(压缩?)文件的链接。

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


【解决方案1】:

SSIS 适合导出大量数据。

【讨论】:

  • 没错,但把这个问题当作学术问题,我回答了。用户对这么大的 excel 文件做什么是另一个问题。
  • OP 可能应该重新考虑用例。通常情况下,当用户要求完全导出时,这意味着系统无法执行他们想要的操作,因此他们尝试自己进行操作。或者部门反应太慢。或者他们想要添加例如营销数据。即便如此,PowerPivot 仍允许用户阅读、匹配、查找、将其他数据源混合到他们心中的内容。与单个行相比,它还需要 更少 内存来在 PowerPivot 中加载那么多数据
  • 您可能是对的,但是直到 OP 说为什么他们需要 Excel 文件中的这么多数据,我们只是在猜测。也许是为了离线可移植性,在这种情况下,.csv 可能会更好。
  • 这就是为什么“为什么?”是开发人员应该问的最重要的问题。导出这么多行可能比找到目标并解决它更昂贵
  • 很遗憾他们不会告诉您绩效指标,因此您可以构建他们真正想要的报告。
【解决方案2】:

让 SQL Server 为您创建一个 SSIS 包,SSIS 包将比编写代码快得多。这样做:

1. In SQL Server Management Studio Right Click on the target database and click on Tasks in the pop-up  menu 
2) Select Import Data
3) On Data Source select Microsoft Excel and browse to where the excel spreadsheet will be.

继续选择并确保保存生成的包。

该程序包可以作为 SQL Server 作业运行,也可以使用 dtexec(一个 SQL Server util)命令从命令行运行。

SSIS 包将非常快速地处理 2000000 行(在我的机器上它每秒读取 10000 行 - 你的结果会有所不同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多