我有一组ssis 2008软件包,我现在需要迁移到ssis 2016。我使用VS data tools 2015来迁移包。包成功迁移,几乎没有关于我处理的脚本任务的警告。
现在其中一个包有一个执行包任务,该任务又调用一个子包。父包和子包的连接管理器都是使用变量(使用表达式)设置的。父包的连接字符串变量是从c#代码设置的,并且按预期工作。子包的连接字符串变量是使用父包变量配置设置的。
简而言之,它就像:
- 父包:
variable connstring
: 从c#代码设置 - 子包:: 从父包
variable connstringchild
设置。connstring
Delay validation
对父包中的包执行任务为真。在子包delay validation
中,每个容器和使用 connManager 的sql任务以及连接管理器都是如此。我还尝试delay validation
在两个包的包级别设置为 true。
尽管如此,当父包被执行时,它在这个执行包任务中失败,并出现以下错误:
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred.
Error code: 0x80004005. An OLE DB record is available.
Source: "Microsoft OLE DB Provider for ODBC Drivers"
Hresult: 0x80004005
Description: "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
从错误中我的猜测是连接字符串的子包变量没有任何值,因此出现错误。尝试进行更多日志记录,看起来在收到此错误后,程序包继续执行并设置配置值并完成执行。failed
但是,当超过最大错误计数时,将返回包的最终结果。
从我在谷歌和这里搜索的任何内容来看,如果delay validation
设置为 true,则此变量验证不应该在执行之前发生。但不知何故,它之前验证并因此失败。2008 包工作正常,没有任何问题。
请注意,父包是使用ManagedDTS程序集从asp.net C#代码执行的。
有没有人遇到过这样的问题?请提供任何建议或解决方案。已经坚持了两个多星期了!