2

我有一个程序可以将 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 位。不是应该已经安装了吗?

4

3 回答 3

1

您需要专门为 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

于 2010-08-21T22:17:38.653 回答
1

查看Microsoft Access 数据库引擎 2010 Redistributable
其他 Excel 版本的可再发行组件也存在。

于 2010-08-21T13:32:01.873 回答
0

当有连接字符串问题时,我发现这个站点很有用。

http://www.connectionstrings.com/excel

还可以看看以前的 SO 问题:

查询 Excel 2010 时诊断 OLEDB 异常

于 2010-08-21T13:52:17.603 回答