我有一组现在要迁移到 ssis 2016 的 ssis 2008 软件包。我使用了 VS数据工具2015 来迁移软件包。包已成功迁移,几乎没有涉及我已处理的脚本任务的警告。
现在,其中一个软件包具有 execute软件包任务,该任务又称为子软件包。使用变量(使用表达式)设置父包和子包的连接管理器。父程序包的连接字符串变量是通过 c#代码设置的,并且按预期工作。子程序包的连接字符串变量是使用父程序包变量配置设置的。
所以简而言之:
variable connstring
:通过 c#代码设置variable connstringchild
:从父软件包的connstring
设置。 Delay validation
对于父包中的 package execute 任务为true。
在子包delay validation
中,对于每个容器和使用connManager以及连接管理器的 sql 任务,为true。
我还尝试在两个软件包的软件包级别上将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
的形式返回。
从我在google和此处进行的搜索来看,如果delay validation
设置为true,则此变量验证不应在执行之前进行。但是不知何故,它在验证之前就失败了。 2008软件包运行正常,没有任何问题。
请注意,使用 ManagedDTS 程序集从 asp.net C#代码执行了父程序包。
有人遇到过这样的问题吗?请提供任何建议或解决方案。已经被卡住了两个多星期了!