【问题标题】:Cannot initialize the data source object of OLE DB provider Microsoft.ACE.OLEDB.12.0 for linked server (null)无法为链接服务器初始化 OLE DB 提供程序 Microsoft.ACE.OLEDB.12.0 的数据源对象(空)
【发布时间】:2018-05-14 16:23:12
【问题描述】:
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 循环。目录中有文件。

直接在 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

【问题讨论】:

  • 那么今天发生了什么变化?服务器故障转移/移动?密码更改?账户变了?发生了一些变化,让我们确定什么,然后我们可以努力解决问题
  • @billinkc 我在帖子中添加了一些附加信息。

标签: sql-server ssis etl ssis-2012 ms-jet-ace


【解决方案1】:

很多东西可以尝试:

  1. 检查 ACE 提供程序的 In Process 和 Dynamic Provider 选项
  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
    

阅读更多How to solve Microsoft.ACE.OLEDB.12.0 error "Unspecified error"

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

【讨论】:

  • 谢谢,1 和 2 已经完成,3 不是问题,因为它在 SSMS 中运行时成功运行。
  • 检查EXCEL进程没有运行,即使excel应用没有打开
  • 阅读最后一个链接
  • 不幸的是,这些都不能解决问题,但就像我在帖子中所说,当我直接从 SSMS 运行它时,它运行正常,问题似乎出在 SSIS 中。
【解决方案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

感谢您对此的所有帮助!

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      可能不是解决方案,但您应该使用以下命令执行 SQL:

      sp_executesql @SQL
      

      它可以防止注射和 wotnot。

      【讨论】:

      • sp_executesql 仅在您使用参数化查询并为其提供参数时才能防止注入。像这样:EXECUTE sp_executesql N'SELECT * FROM AdventureWorksPDW2012.dbo.DimEmployee WHERE EmployeeKey = @level', N'@level tinyint', @level = 109; EXEC 相比,这里没有任何特别的优势,因为这个动态 SQL 使用变量来表示对象的名称,而您不能使用参数化查询来做到这一点。
      • 也许你没有看到@filename 没有被声明。我认为这是一个输入参数
      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多