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

我有一个从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的新计算机,现在连接尝试失败,并引发一个exceptionThe 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

这是因为新版本的Excel需要不同的连接string? 有没有人遇到过这个?

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

查看Microsoft Access数据库引擎2010 Redistributable 。
其他Excel版本的可重新分配也存在。

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

在Visual Studio中,通过将项目设置中的目标CPUtypes设置为x86而不是Any或64位来实现此目的。

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

如果您需要更多详细信息,请参考WoW64: http : //en.wikipedia.org/wiki/WoW64

有连接string问题时,我觉得这个网站很有用。

http://www.connectionstrings.com/excel

也看看以前的SO问题:

在查询Excel 2010时诊断OLEDBexception