首页 > 解决方案 > Dts.TaskResult = (int)ScriptResults。Dts.Events.FireError() 之上的失败是好的?

问题描述

在脚本任务中:

else if (val == 0)
{    
    Dts.Events.FireError(0, "", "Custom Message ", "", 0);
    Dts.TaskResult = (int)ScriptResults.Failure;
}

当我们有Dts.Events.FireError()脚本任务时,当它被调用时,它会导致任务失败并显示自定义错误消息。所以很好写

Dts.TaskResult = (int)ScriptResults.Failure;

像上面的代码一样使任务失败。这不就像两次调用失败吗?任何用例我们都应该拥有这两者。

标签: c#ssis

解决方案


我们应该同时使用

“这取决于。” 你想如何处理错误处理?

我的经验是,将 TaskResult 设置为 Failure 然后使用任务之外的优先约束来驱动控制流行为会更干净。也就是说,“是的,这个任务失败了,但是这个包还有工作要做。” 例如,我们预期的文件不存在 - 这就是错误,但我将采用错误路径来驱动下一步操作(发送有关丢失文件的电子邮件警报)

否则,您可以使用事件处理程序,这完全是一种有效的方法,但对于我咨询过的所有商店,也许有两家已经很好地使用了它们。由于容器嵌套和重新引发事件,许多人会因为事件被多次引发的可能性而感到困惑。

如果我知道我正在从任务中终止执行,那么 FireError 事件会很有帮助,因为它可以帮助我准确记录我中止处理的原因(未找到文件异常)。


推荐阅读