OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”对于链接服务器“(null)”

47

我试图运行以下语句,但是收到下面的错误消息。我已经进行了无数次的答案研究,但都没有起作用。我正在运行Office 365(64位)。我已经加载了Microsoft Access数据库引擎(64位)。这是在Visual Studio 2013与SSDT以及SQL Server 2012中。我无法访问更改SQL Server环境或启动参数的权限。任何帮助都将不胜感激。

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0', 
    'Excel 12.0;Database=C:\Users\UserName\Folder\SomeFile.xlsx;;HDR=NO;IMEX=1', [Table 1$])
  • Msg 7399,级别16,状态1,行1 OLE DB提供程序“Microsoft.ACE.OLEDB.15.0”针对链接服务器“(null)”报告了一个错误。提供程序没有提供有关错误的任何信息。
  • Msg 7303,级别16,状态1,行1 无法初始化与链接服务器“(null)”配套使用的OLE DB提供程序“Microsoft.ACE.OLEDB.15.0”的数据源对象。

这是我尝试过的:

首先,我运行了...

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

接着是...没有爱。

EXEC sys.sp_addsrvrolemember @loginame = N'<<Domain\User>>', @rolename = N'sysadmin';
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1 
GO 

我已经修改了代码以读取 Microsoft.ACE.OLEDB.12.0,因为我也看到过这个,但仍然没有成功。

我还检查了 C:\Users\MSSQLSERVER\AppData\Local\Temp 和 C:Windows\ServiceProfiles\NetworkService\AppData\Local 的权限,并授予以下内容的完全控制权限:System、MSSQLSERVER和管理员,网络服务(对于后者)。

仍旧不成功。

最后,我尝试切换到 Microsoft Access 数据库引擎的 32 位版本,但依然无法工作。

有人能帮忙吗?


1
试试这个有趣的代码:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\UserName\Folder\SomeFile.xlsx;Extended Properties="Excel 12.0 Xml;HDR=NO;"。我一直在使用它与ADODB一起访问Excel 2007和2010文件,并且运行良好。 - JNevill
你能演示一下如何将这行代码加入到我上面的SELECT语句中吗?我无法理解,因为格式可能会被拒绝。谢谢! - Steven Kanberg
这可能有效。我不熟悉Visual Studio中的OPENROWSET语法,但我经常使用ADODB库。 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Source=C:\Users\UserName\Folder\SomeFile.xlsx;Extended Properties="Excel 12.0 Xml;HDR=NO;"', [Table 1$]) - JNevill
在我的情况下,使用“sa”帐户连接到Sql服务器是有效的。每次我从Sql服务器打开Excel文件时,都需要使用“sa”帐户进行连接,而不是Windows帐户。 具体来说,在我的情况下,我在报告设计器中有一个报告。我必须进入“解决方案资源管理器”中的“共享数据源”,使用连接打开rds文件。然后我打开了“凭据”选项卡,并使用“sa”帐户进行修改。 - mihai71
25个回答

39

这是我用于参考的,因为在尝试连接提供程序时我遇到了各种SQL错误信息。其他答案提供“尝试这个,然后这个,然后这个”的建议。我感谢其他答案,但我喜欢将具体的解决方案与具体的问题配对。


错误

...提供程序未提供信息...无法初始化数据源对象...

错误编号

7399、7303

错误详细信息

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object
  of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

解决方案

文件已经打开,请关闭。

来源


错误信息

拒绝访问...无法获取列信息...

错误代码

7399,7350

错误详情

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  Access denied.
Msg 7350, Level 16, State 2, Line 2 Cannot get the column information 
  from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

解决方案

授权访问

来源


错误

没有为一个或多个必需的参数提供值...无法执行查询...

错误编号

???, 7320

错误详情

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 2
Cannot execute the query "select [Col A], [Col A] FROM $Sheet" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

解决方案

列名可能有误。请确认你的电子表格中是否存在[Col A][Col B]


错误

"未指定错误"...无法初始化数据源对象...

错误编号

???, 7303

错误详情

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

解决方案

以管理员身份运行SSMS。请参见此问题


其他参考文献

其他回答建议修改属性。不确定修改这两个属性(选中或取消选中)如何有帮助。


23

30
不只是分享链接,你应该在答案中添加相关的代码。 - MillaresRoo
对我来说情况恰好相反。SQL Server 实例最初是在我的凭据下运行的(在我的开发机器上),无论我如何调整安全角色或文件权限,我都无法解决这个错误。只要我将服务的“登录为”还原为以本地系统运行,错误就停止了。 - zomf
嘿,看那边。我在11个月前来过这里(根据我的最后一条评论的时间戳)。这次问题出在我们的网站作为Network Service(IIS App Pool Identity和因此db登录)运行,但SQL Server实例却是以本地机器帐户运行。解决方法是授予应用程序池ID(Network Service)对SQL服务帐户(Local Machine)临时文件夹的写访问权限。参见@Michael Møldrup的帖子。 - zomf
1
如果您是此Windows系统上的管理员,您还可以选择“本地系统帐户”。这样,您就不必担心更改密码。非常好用!感谢提示!! - Oleg Melnikov

20

不是更改用户,我找到了以下建议:

https://social.technet.microsoft.com/Forums/lync/en-US/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb/the-ole-db-provider-microsoftaceoledb120-for-linked-server-null-reported-an-error-access?forum=sqldataaccess

这可能会帮助其他人-在尝试每种解决方法来修复 SQL 64 上的此错误之后...

无法初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象,对于链接服务器“(null)”。

..我在这里找到了一篇文章...

http://sqlserverpedia.com/blog/sql-server-bloggers/too-many-bits/

..建议我在此文件夹上给Everyone完全权限..

C:\Users\SQL Service account name\AppData\Local\Temp

嘿,预祝好运!我的查询突然变得生动起来。我兴高采烈地喊了声。

Edwaldo


1
"就在那时,我听到了天使的歌声。"(有约翰·皮内特的粉丝吗?)我们已经苦苦思索了一年多。对我们来说,问题出在服务器的c$\Users\MSSQL$SQL2012\AppData\Local\Temp文件夹上。右键单击文件夹,属性,安全,高级,权限,更改权限,添加,输入“Everyone”,检查名称,确定,允许完全控制。 - bwperrin

18

确保Excel文件未打开。


4

以下是针对我个人经验的解决方案,仅在查询的Excel文件未打开且运行SQL Server服务的用户具有访问文件系统权限时有效。我已经看到其他地方已经提供了类似的答案,因此对于更简洁的答案,请见谅:

USE [master]
GO

EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE
GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO


SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                'Excel 12.0;Database=C:\MyExcelFile.xlsx',
                'SELECT * FROM [MyExcelSheetName$]')

3
在SQL Server中,尝试以下步骤:
  1. 打开一个数据库。
  2. 点击选项“Server Object”。
  3. 点击“Linked Servers”。
  4. 点击“Providers”。
  5. 右键单击“Microsoft.ACE.OLEDB.12.0”,然后点击“属性”。
  6. 取消选中所有选项并关闭。

2

对我来说,问题出在文件夹权限上。我需要为用户"Everyone"添加所有的权限。

文件夹/属性/安全 -> 添加用户everyone并设置所有权限。


你的回答救了我的一天。在我来到你的观点之前,我被困在这个问题上大约两个小时。 - Nadim Hossain Sonet

1
我正在运行 Windows 10 上的 SQL Server 2014 64 位。我尝试了各种方法,最终让它工作的是:
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0

我不知道为什么关闭AllowInProcess可以使其工作,但在我的情况下这是关键。感谢您建议关闭链接服务器上的所有选项。

1
C:\Users\SQL Service account name\AppData\Local\Temp 中移除只读复选框对我有帮助。

1

在SQL 2014中,我将SQL Server服务(MSSQL)更改为以LocalSystem运行。这对我解决了问题。

从我记得的情况来看,在2008年之前,它可以正常地作为NT_SERVICE\MSSQL$MSSQL工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接