【问题标题】:Faster way to export data from Excel 2007 sheet to SQL Server 2005将数据从 Excel 2007 工作表导出到 SQL Server 2005 的更快方法
【发布时间】:2011-05-31 01:23:25
【问题描述】:

我有一个 Web 应用程序 (ASP.NET 3.5),它允许用户上传他们自己的 Excel 表格。此表包含有关需要插入 SQL Server 2005 的项目的信息。

我已经有了这个功能,但是速度很慢(完成请求大约需要 20 分钟)。我需要一个更好的方法来处理这个问题。

工作表包含有关项目的信息。这些属性将被插入到多个表中,例如(书籍、作者、标题...等...)。

我目前正在做的事情如下:

  1. 用户上传文件
  2. 应用程序打开文件
  3. 读取每一行并相应地更新数据库。

我正在使用Microsoft.Office.Interop.Excel

编辑:我在每张纸上处理 10.000 多行。

【问题讨论】:

  • 您是否考虑过使用 SQL Server 集成服务?
  • 当我在互联网上寻找解决方案时,它确实出现了,但是,目前它已经超越了我的联盟。不过,我会记住这一点,谢谢。
  • 我知道 Cells(int,int) 比 Range 更具性能。也尝试禁用“重新计算”。还有一些其他的 excel .net 库比互操作更快。

标签: .net asp.net sql-server-2005 excel vsto


【解决方案1】:

您可以使用SqlBulkCopy 类。

【讨论】:

    【解决方案2】:

    如何使用Microsoft Jet Database Engine 将电子表格转换为数据表,然后您可以将其批量插入到数据库中。

    查看this 一个。

    如果您正在处理 Excel 2007 文件,那么您需要使用不同的提供程序。

    【讨论】:

      【解决方案3】:

      根据我的经验,通过互操作读取和写入 Excel 电子表格比使用糖蜜要慢。对于您处理的数据量如此之大,我并不感到惊讶。

      要绕过创建 Excel 实例,请尝试直接与电子表格对话。您可能会注意到一个数量级的改进 - 现在您可能会在几秒钟内完成。如果您使用的是 2007/2010 .xlsx 文件,我之前成功使用过EPPlus。如果您接受旧的 .xls 文件,this 看起来是个不错的开始,但我以前从未使用过。

      首先肯定要分析您的应用程序,以确定这是否是问题所在 - 我敢打赌,但可能是您的 SQL 插入或其他问题。

      【讨论】:

      • 感谢您的建议,我目前正在查看 EPPlus,它看起来就像我正在搜索的内容。
      【解决方案4】:

      您是否尝试使用openrowset 直接使用 SQL 服务器打开 EXCEL 文件。

      【讨论】:

      • 我正在使用 Excel > 2007。我认为 Jet 引擎不起作用,这就是我使用 Interop.Excel 的原因。
      • 你用谷歌搜索了吗,看起来它也适用于 excel 2007 你只需要正确的 OleDB 连接器
      • 您是否尝试将您的 excel 文件保存为 97-2003 格式并使用 OpenRowSet ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多