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

问题描述 投票:0回答:6
DECLARE @PATH NVARCHAR(1000) = N'\\MY-SERVER\C$\Folder\\'
DECLARE @TABLE NVARCHAR(50) = SUBSTRING(@FILENAME,0,CHARINDEX('.',@FILENAME))
DECLARE @SQL NVARCHAR(4000) = 
    N'IF OBJECT_ID(''dbo.' + @TABLE + ''' , ''U'') IS NOT NULL 
    DROP TABLE dbo.[' + @TABLE + ']
    SELECT * INTO [' + @TABLE + ']
    FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0''
                    ,''Text; Database='+@PATH+';''
                    ,''SELECT * FROM [' + @FILENAME + ']'')'

EXEC(@SQL)

今天我在 SSIS 2012 中遇到了 Microsoft.ACE.OLEDB.12.0 驱动程序的问题。上面的脚本位于一个存储过程中,该过程根据 SSIS 循环提供的当前文件动态地将 .csv 加载到数据库中存储过程位于其中。目录中有文件。

直接在 SQL Server Management Studio 中运行时,存储过程可以正确运行。

直到今天为止,这一直运行良好。今天我收到以下错误:

执行查询“EXEC [dbo].[CreateAndImportCSVs] ?”失败并出现以下错误:“无法初始化链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。”。 可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

有关此问题的任何帮助都会很棒!

编辑

因此,当我查看昨天服务器上安装的 Windows 更新时,我听到了警钟!安装了以下两个:

Microsoft Office Access 运行时和数据连接 2007 (SP3) http://support.microsoft.com/kb/2526310

2007 Microsoft Office System 更新 (KB967642) http://www.microsoft.com/downloads/details.aspx?FamilyId=E93AB1BE-ADE6-4FF8-8637-DBD3EBE3C5C5&displaylang=en

sql-server ssis etl ssis-2012 ms-jet-ace
6个回答
2
投票

有很多值得尝试的事情:

  1. 检查 ACE 提供程序的“进程中”和“动态提供程序”选项
  2. 检查 Temp 文件夹的权限
  3. 检查分配的MemToLeave内存区域
  4. 确保
    EXCEL
    进程没有在后台运行
  5. 确保启用“临时分布式查询”(1)

    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
    

了解更多信息如何解决 Microsoft.ACE.OLEDB.12.0 错误“未指定错误”

我还在以下链接中找到了一个有趣的建议解决方案,请看一下:


2
投票

这个问题自行解决了。安装了更多更新,其中之一必须解决了先前更新引入的问题:

Microsoft Office 2010 (KB4011188) 64 位版本更新 https://support.microsoft.com/kb/4011188

Microsoft Office 2010 (KB2553347) 64 位版本更新 http://support.microsoft.com/kb/2553347

Microsoft Office 2010 安全更新 (KB2553338) 64 位版本 https://support.microsoft.com/kb/2553338

感谢您提供的所有帮助!


1
投票

为我解决这个问题的最后一步是将电子表格移动到 SQL Server 能够访问的 Windows 目录。我将电子表格移动到一个新的子目录,位于我的 sql 数据库所在的位置,问题得到了解决。


1
投票

如果 Office 的安装是“单击运行”安装,则 SQL Server 无法访问访问提供程序。

可以通过以下任一方法解决该问题。

OLEDB驱动问题解决方法

分辨率

从 Microsoft 365 应用企业版 2009 开始,工作 已完成将 ACE 打破 C2R 虚拟化泡沫 以便 Office 之外的应用程序能够找到 ODBC, Access数据库引擎提供的OLEDB和DAO接口 C2R 安装。

使用下表了解是否需要其他组件 在您的环境中访问这些接口所必需的:


0
投票

可能不是一个解决方案,但你应该执行 SQL:

sp_executesql @SQL

它可以防止注射和感染。


0
投票

目前我们安装了16.0。在一台服务器上,对于旧 12.0 和新 16.0 驱动程序,选项 N'AllowInProcess' 和 N'DynamicParameters' 均设置为 1。

在另一台服务器上,12.0 在两个选项都设置为 1 的情况下运行良好。但 16.0 仅当它们都设置为 0 时才有效。

IT 发誓两个系统是相同的.......

© www.soinside.com 2019 - 2024. All rights reserved.