如何从C#连接到不同版本的Excel?

时间:2010-08-21 12:54:19

标签: c# excel oledb oledbconnection

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

http://www.connectionstrings.com/excel

另请查看以前的SO问题:

Diagnosing an OLEDB exception when Quering Excel 2010