Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:无法初始化OLE DB提供程序的数据源对象";Microsoft.ACE.OLEDB.12.0“;“用于链接服务器”;(无效)“;_Sql Server_Excel_Openrowset - Fatal编程技术网

Sql server SQL Server:无法初始化OLE DB提供程序的数据源对象";Microsoft.ACE.OLEDB.12.0“;“用于链接服务器”;(无效)“;

Sql server SQL Server:无法初始化OLE DB提供程序的数据源对象";Microsoft.ACE.OLEDB.12.0“;“用于链接服务器”;(无效)“;,sql-server,excel,openrowset,Sql Server,Excel,Openrowset,我正在尝试运行以下查询: SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Somefile.xlsx', 'SELECT * FROM [Sheet$]') 但我得到了这个错误: Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "

我正在尝试运行以下查询:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
但我得到了这个错误:

Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
我尝试了以下方法:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
以及:

当我转到“服务器对象”->“链接服务器”->“提供者”时,会列出Microsoft.ACE.OLEDB.12.0

已安装Acess数据库引擎x64,所有Office产品都是64位的,我的SQL Server也是64位的

如果有必要,所有用户都可以访问users文件夹中的Temp文件夹

(这些都是我在这个问题的类似答案中找到的建议)


编辑:使用SQL Server 2014。

请确保关闭excel电子表格并以管理员身份运行SSMS。

我也遇到了这个问题,并按照您的方式执行了步骤,最后遇到了错误。 最后,我使用了一个超级用户帐户,使用下面的脚本,问题已经解决了

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=Yes;IMEX=1;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
我从两个缺失的步骤中找到了让它为我工作的方法

1) 检查临时文件夹的权限

这是必需的,因为提供程序在检索数据时使用临时文件夹。根据您使用的是本地系统帐户还是网络域帐户,该文件夹可以是以下文件夹之一

对于网络帐户,文件夹为
:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp

对于本地系统帐户its
:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp

右键单击此文件夹,并授予其对执行代码的帐户的读写权限

2) 检查分配的MemToLeave内存区域

  • 打开SQL Server配置管理器->服务->SQL Server服务
  • 右键单击并选择“属性”
  • 转到高级选项卡并追加-g512;启动参数属性,它将解决此问题
如果您按照中的说明操作,也可以在不需要
AllowInProcess
的情况下使其工作。核心指示是:

为了能够执行链接服务器查询,还可以在链接服务器属性上将RPC设置为true

使用进程外提供程序设置链接服务器所需的权限:

验证DCOMCNFG中的以下设置:开始-->运行-->DCOMCNFG

  • 组件服务-->我的电脑-->属性
    验证是否在“默认属性”选项卡中设置了以下选项:

    • 已选中“在此计算机上启用分布式COM”
    • 默认身份验证=连接
    • 默认模拟级别=标识或模拟
  • 组件服务-->我的计算机-->DCOM配置-->MSDAINITIALIZE

    • 右键单击MSDAINITIALIZE-->属性-->安全性
    • 在“启动和激活权限”、“访问权限”和“配置权限”下添加SQL Server服务帐户(如果使用SQL登录连接到SQL Server)或windows用户帐户
    • 给予这些账户完全的权利
  • 重新启动服务器


  • 我们遇到了此故障,但没有解决任何问题,直到我们注意到我们的服务帐户配置为使用域帐户,而不是默认的服务帐户。另一台使用本地系统的服务器使用相同的模拟设置运行完全相同的作业并执行用户


    我们进行了调查并确认,在安全设置|本地策略|用户权限分配下的本地安全策略中为SQL Agent服务帐户添加了作为操作系统权限的一部分的Act解决了问题。

    我对这些内容不太熟悉,记不住错误消息,因此,抱歉,如果这与此无关:是因为您运行工作簿时工作簿已打开吗?工作簿未打开。当您以系统管理员的身份运行工作簿时,它是否工作?否,仍然不工作。工作表名为“sheet”,而不是“Sheet1”是否正确?非常感谢您的建议,特别是权限部分。这并不常见,它实际上是一种解释,而不仅仅是一种解决方案。这是很有价值的。这为运行SSMS修复了它,因为管理员确实起了作用——但我觉得这不必要。它需要以管理员身份运行有什么原因吗?
    SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=Yes;IMEX=1;Database=C:\Somefile.xlsx',
    'SELECT * FROM [Sheet$]')