Microsoft ACE OLEDB提供程序抛出无法find可安装的ISAMexception

我正在尝试使用64位进程读取Excel电子表格。 因此,我使用64位版本的Micorosft Access数据库引擎2010 。

下面的代码

var cs = @"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=C:\test.xls;" + @"Extended Properties=""Excel 14.0;"""); con = new OleDbConnection(cs); con.Open(); 

抛出一个例外:

找不到可安装的ISAM

使用谷歌,我发现了很多关于这个exception的问题。 但是他们提到JET,似乎不适用于我的问题。

任何build议?

我今天也遇到了同样的问题。 我的configuration是:

  • 读取XLSX文件的x64 .NET 2.0桌面应用程序。
  • Microsoft Access数据库引擎2010 Redistributable的x64版本
  • 我的连接string包含Extended Properties属性,值为“Excel 14.0;”,如组件的文档所示 。

我有和你一样的问题: 无法find可安装的ISAMexception 。 我遇到这篇文章后解决了这个问题,其中指出MS组件的文档中存在一个错误。 我不确定组件的文档是否不准确,我可以说的是将Extended Properties更改为Excel 12.0 Xml解决了这个问题。

我遇到了完全相同的问题,试图从Excel 2007 .xlsx文件中获取数据。

通常可靠的“Microsoft.ACE.OLEDB.12.0”驱动程序只是拒绝连接,抛出一个你找不到的无法find可安装的ISAM ”错误。

最终,我发现这个代码,工作:

 SELECT * FROM OPENROWSET('MSDASQL', 'DRIVER=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb); DBQ=D:\Sample.xlsx', 'SELECT * FROM [Sheet1$]') 

希望这可以帮助 !

(从这个线程的最后发帖中修改: SQLTeam.com )

过了一会儿

现在,突然,我原来的连接string正在工作。 这是失败之前(我成功连接使用上面的MSDASQLstring之前),但现在工作成功。

 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\Sample.xlsx;HDR=NO;IMEX=1', 'SELECT * FROM [Sheet1$]') 

奇怪,很奇怪。

在为我的连接string添加引号后,ISAM错误消失(下面的代码)。

 string GetConnectionString(string fileName) { return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;\""; } 

我发现用excel和工具安装2013年办公室,并保持以前的版本完好无损。 然后做一个自定义的安装…然后打开2013 Excel的一次,然后closures它。 然后转到控制面板,添加删除function从2013年删除excel。然后打开2010年excel,让它做一个自己的快速刷新安装,然后它的工作没有错误。

到“ 本文 ”的链接是正确的,但将单引号改为双引号。 我正在使用OpenFileDialog获取任何Excel文件。 (我正在使用Excel 2013进行testing)

=>原始格式在post<=
// Newer version,any xls file“Provider = Microsoft.ACE.OLEDB.12.0; Data Source ='C:\ AlmostAnyExcelVersionFileRunningUnder64BitOS.xls'; Extended Properties ='Excel 12.0; HDR = NO; IMEX = 1;';”

=>更正格式<=
XLConnection =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source =”&Chr(34)&ExceilFileDialog.FileName&Chr(34)&“; Extended Properties =”&Chr(34)&“Excel 12.0; HDR = NO; IMEX = 1;” &Chr(34)&“;”