使用执行包任务时获取连接和奇怪的行为

时间:2012-08-11 18:46:56

标签: sql-server ado.net ssis oledb

我有一个Master包,我在使用Execute包任务调用几个包。

子包和主包都没有任何配置,并且在连接管理器中使用硬编码的SQL身份验证连接连接OLEDB(SQL Server)。

此外,软件包还使用密码加密敏感。

看到奇怪的行为: 1.子程序包在从BIDS运行时成功运行,但在从具有“获取连接失败”的主程序包运行时失败

“对连接管理器的AcquireConnection方法调用失败,错误代码为0xC0202009”

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您的子包似乎没有从父包中获取连接字符串。您需要将连接字符串从Parent传递给子包。

选中此article

更新: -

当你有EncryptSensitiveWithPassword作为你的子包和父包的访问控制时,然后从父包执行子pkg

在执行期间,系统将提示您输入子包的密码。

有些情况甚至在运行时输入密码之后,由于获取连接错误,子pkg执行失败。由于子连接字符串(在执行包任务中),这可能仍然发生(我不确定)指向修改后尚未重建的旧子包。

我的建议是当你将Execute SQL Task拖到控制流上时使用文件系统位置并指向放在bin文件夹(或部署路径)中的更新子包 并在任务中输入子包的密码

enter image description here

为了从Integration Service(MSDB)运行父包,您需要在运行时执行时如何传递子解密密钥。

编辑: 步骤1:为父SSIS包创建包配置。Execute Package Task具有属性PackagePassword。您需要在创建配置文件时选择此属性

      Executables->ExecutePackageTask->PackagePassword

enter image description here

步骤2:创建XML文件后,打开它并搜索ConfiguredType =属性,并在配置的值中输入子包的密码

enter image description here

步骤3:在MSDB中导入父包后,在配置选项卡中选择配置文件 enter image description here

答案 1 :(得分:1)

64/32位错误?你有excel连接管理器作为源吗?

Dtexec同时拥有64位和32位应用程序。我假设当你从BIDS运行时,它使用32位dtexec,你是如何运行主服务器的?如果您双击它,可能是问题,因为DTExecUI(执行包实用程序)仅作为32位应用程序可用。如果您正在使用64位服务器并通过DTExecUI运行程序包,则程序包将以32位仿真模式运行。此外,如果使用的连接管理器不符合32位,则程序包可能会失败。

请务必注意,如果在32位环境中开发软件包并希望在64位环境中运行软件包,则连接管理器需要符合64位标准。某些连接管理器(如Excel)仅在32位环境中工作。

编辑: 尝试在此处设置密码: enter image description here