【问题标题】:How do I connect to different versions of Excel from C#?如何从 C# 连接到不同版本的 Excel?
【发布时间】:2010-08-21 12:54:19
【问题描述】:

我有一个程序可以将 Excel 中的数据导入数据集。要连接到 Excel,我使用以下代码...

return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + 
fileName + "; Jet OLEDB:Engine Type=5;"+ "Extended Properties=\"Excel 8.0;\"");

我刚买了一台装有 Excel 2010 的新电脑,现在连接尝试失败并抛出异常说 The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

这是因为新版本的 Excel 需要不同的连接字符串吗?有人遇到过这种情况吗?

编辑: 实际上,我只是在某处读到使用 System.Data.OleDbClient 类甚至不需要在计算机上安装 Excel。所以我的问题可能与 Excel 无关,而是与 Microsoft.Jet 工具有关。我的电脑运行的是 Windows7 64 位。不应该已经安装了吗?

【问题讨论】:

标签: c# excel oledb oledbconnection


【解决方案1】:

查看Microsoft Access Database Engine 2010 Redistributable
其他 Excel 版本的可再发行组件也存在。

【讨论】:

    【解决方案2】:

    您需要专门为 32 位编译程序,以便它可以在 WoW 子系统中运行并调用 32 位 Jet 提供程序。如上所述,没有 64 位版本的 Jet 提供程序,而且很可能永远不会。

    在 Visual Studio 中,您可以通过将项目设置中的目标 CPU 类型设置为 x86 而不是 Any 或 64 位来做到这一点。

    如果您没有程序的源代码,您可以使用 .NET 框架附带的 corflags.exe 实用程序和 /32bit+ 标志来修改 .exe,但如果它是一个强签名程序集,您将修改后需要 .SNK 重新签名。

    如果您需要更多详细信息,这里是关于 WoW64 的参考:http://en.wikipedia.org/wiki/WoW64

    【讨论】:

      【解决方案3】:

      我发现这个网站在遇到连接字符串问题时很有用。

      http://www.connectionstrings.com/excel

      还可以看看之前的一个 SO 问题:

      Diagnosing an OLEDB exception when Quering Excel 2010

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多