在64位模式下运行我的软件包时,我一直在努力将数据导出到Excel。目前我已将Runtime64bit设置为false以完成工作,但出于某些强烈原因,我确实希望以64位模式运行。
为此,我安装了AccessDatabaseEngine_X64.exe(卸载现有驱动程序后)。但我仍然无法获得连接错误。安装64位驱动程序后,我必须以32位模式运行。有什么问题?
我注意到的是,当我创建新的Excel连接时,连接管理器对话框显示指向32位版本的驱动程序路径。当我查看其他驱动程序时,它们也指向32位版本。 (见下面的截图)。这有什么关系吗?
我的环境: - Windows Server 2012 Standard(64位) - MSSS DT 2012 - MS Excel 2010(64位) - MicrosfotAccess数据引擎2010(64位)
我的Excel文件以97-2003格式(.xls)保存
答案 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位模式运行。
根据此情况,您需要安装正确版本的驱动程序!
在64位上运行SSIS包;安装64位驱动程序!
以32位运行;然后安装32位驱动程序!
答案 1 :(得分:0)
答案 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。这允许您运行包并在运行时停止错误。