首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决“找不到可安装的ISAM”。OLE DB提供程序"Microsoft.ACE.OLEDB.12.0“错误

如何解决“找不到可安装的ISAM”。OLE DB提供程序"Microsoft.ACE.OLEDB.12.0“错误
EN

Stack Overflow用户
提问于 2012-01-10 02:48:57
回答 10查看 59.2K关注 0票数 21

我试图使用带有"Microsoft.ACE.OLEDB.12.0“OLE提供程序的Excel ()命令将Excel2007 (.xlsx)文件中的数据导入Server 2008,并得到一个持久的”无法找到可安装的ISAM“错误。所有硬件都是32位。

修订后的1/10/12试图更集中注意异常情况

以下The语句产生错误:

代码语言:javascript
运行
复制
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
    'SELECT * FROM [Sheet1$]'
)

如果我以“Excel97-2003”格式(.xls)保存Excel文件,并使用旧的Microsoft.Jet.OLEDB.4.0提供程序导入数据,它就能正常工作。这使我认为这不是安全或其他环境问题。

代码语言:javascript
运行
复制
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES', 
    'SELECT * FROM [Sheet1$]'
)

但是,当我尝试带有Microsoft.ACE.OLEDB.12.0提供程序的*.xls文件时,它应该向后兼容*.xls格式,但同样的错误也会失败:

代码语言:javascript
运行
复制
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";', 
    'SELECT * FROM [Sheet1$]'
)

另外,有趣的是,当我使用SSMS“导入数据.”巫师,它很好用。我将Import向导输出保存为一个SSIS包,并查看SSIS文件,试图找出它是如何工作的,并且它正在成功地使用Microsoft.ACE.OLEDB.12.0提供程序。这是来自SSIS包的连接字符串:

代码语言:javascript
运行
复制
<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>

我还完成了相关的Server配置,以允许OPENROWSET分布式查询:

代码语言:javascript
运行
复制
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO

如果我还设置了以下*sp_MSset_oledb_prop*值(在某个帖子中找到).

代码语言:javascript
运行
复制
USE [master] 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 

...then错误更改为“未指定的错误”:

代码语言:javascript
运行
复制
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

然而,我不确定这是上下游的错误。(它现在是否找到了“可安装的ISAM”,但后来失败了?)

我在两台不同的机器/操作系统(Windows 2003,Windows SP3)上尝试过多个Excel文件。这两台机器都是32位.

我还尝试重新安装Office 2007和Office 2010版本的AccessDatabaseEngine.exe (分别是http://www.microsoft.com/download/en/details.aspx?id=23734http://www.microsoft.com/download/en/details.aspx?id=13255 ),但都没有效果。

概括地说:

  • "Microsoft.Jet.OLEDB.4.0“提供程序使用T工作,而"Microsoft.ACE.OLEDB.12.0”则不工作。
  • "Microsoft.ACE.OLEDB.12.0“使用”导入数据.“向导(据我所知,从保存的SSIS作业文件中可以看出)。
  • 将"AllowInProcess“和"DynamicParameters”属性设置为"1“将错误更改为”未指定的错误“。(这是向前迈出的一步吗?)

有什么想法吗?

EN

回答 10

Stack Overflow用户

发布于 2014-01-30 09:42:33

试一试,它可能对你有帮助:

根据需要设置pathstrFileType

代码语言:javascript
运行
复制
      string connString = "";
//    string strFileType = Path.GetExtension(UpfileName.FileName).ToLower();
//    string path = UpfileName.PostedFile.FileName;

if (strFileType.Trim() == ".xls")
   {

      connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
   }
   else if(strFileType.Trim() == ".xlsx")
    {
            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
    }
票数 1
EN

Stack Overflow用户

发布于 2019-08-22 13:56:50

这对我来说很管用

代码语言:javascript
运行
复制
Select *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
                'text;
                 HDR=yes;
                 imex=1;
                 driver={Microsoft text Driver (*.xls, *.xlsx, *.xlsm, *.xlsb,*.csv)}; 
                 extended properties=excel 12.0 xml; 
                 Database=<path>\', 
                'SELECT * from [<filename>#csv]')
票数 1
EN

Stack Overflow用户

发布于 2014-05-19 10:30:01

终于找到解决办法了!

看看这个:Msg 7302、级别16、状态1、第1行不能创建OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的实例(Null)

基本上,你去

控制面板>管理工具>组件服务

然后展开

组件服务>计算机>我的计算机> DCOM Config

发现

麦迪尼提

属性>安全性>启动和激活权限

点击

定制>编辑..。

如果您愿意,请添加您的登录名或“每个人”

勾选新用户/组的所有“允许”框

然后在两页上点击OK

现在看看您的OpenRowSet / OpenDataSource命令是否有效

感谢Ramesh Babu Vavilla (vr.babu),来自social.technet.microsoft.com的链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8797978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档