SSIS为什么所有连接管理器驱动程序指向32位版本?

时间:2016-09-28 12:12:23

标签: ssis ssis-2012

在64位模式下运行我的软件包时,我一直在努力将数据导出到Excel。目前我已将Runtime64bit设置为false以完成工作,但出于某些强烈原因,我确实希望以64位模式运行。

为此,我安装了AccessDatabaseEngine_X64.exe(卸载现有驱动程序后)。但我仍然无法获得连接错误。安装64位驱动程序后,我必须以32位模式运行。有什么问题?

我注意到的是,当我创建新的Excel连接时,连接管理器对话框显示指向32位版本的驱动程序路径。当我查看其他驱动程序时,它们也指向32位版本。 (见下面的截图)。这有什么关系吗?

enter image description here

我的环境:   - Windows Server 2012 Standard(64位)   - MSSS DT 2012   - MS Excel 2010(64位)   - MicrosfotAccess数据引擎2010(64位)

我的Excel文件以97-2003格式(.xls)保存

3 个答案:

答案 0 :(得分:1)

让我引用这个FAQ - How to run SSIS Packages using 32-bit drivers on 64-bit machine

  

在64操作系统上安装Integration Services时,它将会   安装32位和64位版本的DTExec命令行工具   用于执行SSIS包。

     

DTExec 32位可以在以下位置找到:C:\ Program Files(x86)\ Microsoft   SQL Server \ 90 \ DTS \ Binn

     

DTExec 64位位于:C:\ Program Files \ Microsoft SQL   Server \ 90 \ DTS \ Binn有关更多信息,请单击以下URL

     

http://msdn.microsoft.com/en-us/library/ms162810.aspx

     

如果您的SSIS包引用任何32位DLL或32位驱动程序   从您的包中,您必须使用32位版本的DTExec   执行SSIS包。

- 编辑 -

通过示例扩展说明。

想象一下,您创建了一个新的SSIS包。在其中,您连接到Excel文件。要使其正常工作,您需要拥有MS Office或正在执行该程序包的计算机中的Microsoft Access 2016 Runtime

因此,您在桌面的VS中创建了包。你安装了Office 32位,一切正常。

部署到服务器时,在本例中为Windows 2012(64位)。你认为......停!服务器的位无关紧要。好的,但我的SQL Server是64位所以......不,它也没关系!

发布SSIS包后,请查看计划的作业属性。在那里,您可以指定以64位或32位模式运行。

Job step properties

根据此情况,您需要安装正确版本的驱动程序!

在64位上运行SSIS包;安装64位驱动程序!

以32位运行;然后安装32位驱动程序!

答案 1 :(得分:0)

检查是否安装了两个版本的DtsDebugHost.exe。

如果这样,您可能需要安装最新的Windows Server 2012 Service Pack。

reference

答案 2 :(得分:0)

  

但我仍然无法获得连接错误。安装64位驱动程序后,我必须以32位模式运行。有什么问题?

当您执行包并查看“进度”选项卡时,您无疑会收到类似于以下内容的错误消息:

  

[连接管理器" Excel连接管理器"]错误:未注册请求的OLE DB提供程序Microsoft.Jet.OLEDB.4.0。如果未安装64位驱动程序,请以32位模式运行该程序包。错误代码:0x00000000。   OLE DB记录可用。来源:" Microsoft OLE DB服务组件" Hresult:0x80040154描述:"类未注册"。

设置Excel连接管理器时,选择Excel 97-2003文件类型将默认为Microsoft Jet OLEDB驱动程序,该驱动程序仅作为32位版本提供。

假设您仍然安装了64位Microsoft Access Database Engine 2010 Redistributable,则需要执行的操作是单击您在“连接管理器”选项卡中创建的Excel连接管理器。在“属性”窗格中,查找ConnectionString属性(如果按类别分组,则在“其他”下)。

您将看到提供程序设置为Provider=Microsoft.Jet.OLEDB.4.0,即32位驱动程序。如果您选择了" Excel 2007"作为文件类型,它将使用Microsoft.ACE.OLEDB.12.0 32位或64位,具体取决于您安装的Microsoft Access数据库引擎可再发行组件。

将ConnectionString属性中的Provider更改为Microsoft.ACE.OLEDB.12.0。当您更改此设置时,您会注意到错误列表窗格中出现的错误类似于:

  

错误1验证错误。数据流任务1:程序包:请求的OLE DB提供程序Microsoft.ACE.OLEDB.12.0未注册。如果未安装32位驱动程序,请以64位模式运行程序包。错误代码:0x00000000。 OLE DB记录可用。来源:" Microsoft OLE DB服务组件" Hresult:0x80040154描述:"类未注册"。 Package.dtsx 0 0

     

错误2验证错误。数据流任务1:包:' Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=219816 Package.dtsx 0 0

这些错误与SSDT有关,您之前提到的一点是:

  

当我查看其他驱动程序时,它们也指向32位版本。 (见下面的截图)。这有什么关系吗?

SQL Server数据工具是一个32位应用程序,可能就是“添加SSIS连接管理器"对话框,您看到连接管理器指向32位版本。很久以前就已经提出了对64位SSDT的要求。这也是这些新错误在执行前出现的原因,如果您尝试执行包,则会出现在弹出消息框中。

请注意,错误是验证错误,这些错误提示解决方案。

选择您的Excel连接管理器,将DelayValidation属性设置为False。这将停止显示执行前错误。其次,对于Package或使用Excel Connection Manager的Control Flow任务,请将DelayValidation属性设置为False。这允许您运行包并在运行时停止错误。