0

我在 SSIS 2012 中遇到了一个非常严重的错误。我只是在 SSDT 中运行。

我在 For...Each 块中有一个脚本任务。

第一次到达时它运行良好。

第二次到达时,我在脚本任务中得到一个通用的“调用错误对象引发的异常”,归因于脚本。

它是一个小脚本,全部在 Main() 中,并带有一个 Try...Catch 块。
我没有点击添加自定义文本的 Catch。
似乎它的行为就好像它从未进入脚本......

除非
我实际上在其中设置了一个断点...... 在这种情况下,它运行良好
无论我是逐行还是按 F5。

我知道这不是很具体,但我希望有人已经看到了。

有没有人见过这样的事情?


如前所述,我已经尝试过调试(显然),但是我没有收到任何错误。

我已经尝试将我的变量访问从基本更改为通过 VariablesDispenser.LockOneForRead,以防它与在 Main() 之前发生的变量有关。我想我得到了循环中使用变量的所有地方,但这并没有帮助。

4

2 回答 2

0

因为这太致命了,所以我会继续回答它。

它实际上是一个未“声明”的变量,但在我的 Catch 块中。
复制粘贴错误:/

我在 Catch 块中使用了一个变量作为
“Dts.Variables [“TaskName”]”
,但我没有在“脚本任务”窗口中选择它。

我不知道为什么它没有给我特定的“未在集合中找到”错误。
我之前确实遇到过这种情况并看到过。:/

于 2014-04-03T15:24:33.097 回答
0

刚碰到那个,要弄清楚这是一头熊。

我定义了一个静态变量(实际上是一个单例类)。显然,SSIS 不会在第二次和后续调用时重新初始化程序,而是保留图像并简单地在其入口点重新启动。

我的 Singelton 类(我现在已经验证了几个静态变量)没有重新初始化。它仍然存在。问题是它是使用第一次调用脚本时存在的 Dts 变量集创建的。由于它的“自我”值不为空,它从未重新实例化。

当我意识到正在发生的事情时,当然很容易修复,但是人们习惯了一个独立的环境,其中每个程序实例的静态值都为 null 或设置为静态初始值。我们自动假设程序的新“运行”同样将使其全局空间“干净”......事实上,我相当确定这是我作为 C#“合同”的一部分阅读的内容,我' d 永远不需要担心变量的内存空间中的历史遗留问题。

好吧,事实证明,这份“合同”与任何微软会让你签署的合同一样好。

其实是喜忧参半。知道会发生这种情况,我可以使用它来节省循环调用的脚本中的大量开销......但由于它不是很好,或者可能没有记录,我需要小心解决方法和默认加载测试,如果在未来的某个版本或版本中,事实证明并非如此。

(对你的批评要温柔......我是 SSIS 的新手。对程序范式来说不是那么新。CICS 大型机程序将重新初始化全局空间,除非你在链接中做了一些事情来表明它不要......如果你'重新发明轮子至少看看旧轮子)。

-- 台湾

于 2019-12-23T21:06:56.483 回答