1

我有一组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#代码执行的。

有没有人遇到过这样的问题?请提供任何建议或解决方案。已经坚持了两个多星期了!

4

0 回答 0