我在SSIS 2012中遇到了一个非常严重的错误。 我刚刚在SSDT中运行。
我在For ... Each块中有一个脚本任务。
第一次到达时它运行良好。
第二次到达时,我在脚本任务中得到了一个泛型的“调用错误对象引发的异常”,归因于脚本。
这是一个小脚本,全部在Main()中,并带有Try ... Catch块 我没有点击Catch,它增加了自定义文本 看起来好像它从不进入剧本......
除了
如果我真的设置了一个断点.... 在这种情况下运行正常,
我是逐行还是点击F5。
我知道这不是非常具体,但我希望有人见过这个。
以前有人见过这样的事吗?
如上所述,我已经尝试过调试(显然),但后来我没有收到任何错误。
我已经尝试将我的变量访问从基本更改为通过VariablesDispenser.LockOneForRead,以防它在Main()之前发生变量。 我想我已经获得了循环中使用变量的所有位置,但这没有帮助。
答案 0 :(得分:0)
因为这太杀手了,所以我要继续回答它。
它实际上是一个非“声明”变量,但在我的Catch块中 复制粘贴错误:/
我使用变量作为
“Dts.Variables [” TASKNAME “]”
在Catch块中,但我没有在Script Task窗口中选择它。
我不知道为什么它没有给我特定的“未找到收集”错误 我之前肯定遇到过这种情况并且看到了这一点。 :/
答案 1 :(得分:0)
就碰到了,要弄清楚这是熊。
那是我定义了一个静态变量(实际上是单例类)。显然,SSIS不会在第二次及以后的调用中重新初始化程序,而是保留映像并只是在其入口点重新启动。
我的Singelton类(并且现在已经验证了几个静态变量)没有被重新初始化。它仍然存在。问题在于它是使用首次调用脚本时存在的Dts变量集创建的。由于它的“自我”值不为null,因此永远不会重新实例化。
当我意识到发生了什么时,它当然很容易修复,但是人们习惯了一个独立的环境,在该环境中,每个程序实例的静态值都为null或设置为静态初始值。我们自动假定该程序的新“运行”将同样具有其全局空间“干净” ....事实上,我相当确定这是我作为C#“合同”的一部分阅读的内容, d永远不必担心变量在内存空间中的历史残缺。
事实证明,“合同”与任何Microsoft都会签署的合同一样好。
这实际上是喜忧参半。知道发生这种情况后,我可以用它来保存循环中调用的脚本中的 lot 开销...但是由于情况不佳或未记录,我需要格外小心-arounds和默认加载测试,如果在某些将来的版本或版本中发现事实并非如此。
(请谨慎对待……我对SSIS还是陌生的。程序范式并不是那么新。除非您在链接中做一些事情以表明不这样做,否则CICS大型机程序将重新初始化全局空间。如果您要至少至少在旧车轮上重新发明车轮)。
-TWZ