我试图使用带有"Microsoft.ACE.OLEDB.12.0“OLE提供程序的Excel ()命令将Excel2007 (.xlsx)文件中的数据导入Server 2008,并得到一个持久的”无法找到可安装的ISAM“错误。所有硬件都是32位。
修订后的1/10/12试图更集中注意异常情况
以下The语句产生错误:
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提供程序导入数据,它就能正常工作。这使我认为这不是安全或其他环境问题。
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格式,但同样的错误也会失败:
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包的连接字符串:
<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分布式查询:
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO如果我还设置了以下*sp_MSset_oledb_prop*值(在某个帖子中找到).
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错误更改为“未指定的错误”:
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=23734和http://www.microsoft.com/download/en/details.aspx?id=13255 ),但都没有效果。
概括地说:
有什么想法吗?
发布于 2014-01-30 09:42:33
试一试,它可能对你有帮助:
根据需要设置path和strFileType
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\"";
}发布于 2019-08-22 13:56:50
这对我来说很管用
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]')发布于 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的链接
https://stackoverflow.com/questions/8797978
复制相似问题