如何通过vb.net错误时停止包

时间:2015-06-02 10:58:32

标签: vb.net ssis

我正在通过vb.net在SSIS上创建脚本组件

我想显示消息" ERROR"并且运行包停止。

我尝试使用ConponentMetaData.FireError(0,me.String," ERROR",String.Empty,0,False)

当我运行包时,消息显示,脚本组件变为绿色,但程序包仍然运行。

我认为ConponentMetaData没有停止包的功能。 我需要找到如何停止包并显示消息的方式。

我想知道如何做到这一点

1 个答案:

答案 0 :(得分:0)

你能不能将脚本任务状态设置为失败并让它自行停止?

ComponentMetaData.FireError(0, me.String, "ERROR", String.Empty, 0, False)
Dts.TaskResult = ScriptResults.Failure
Exit Sub

这将使脚本任务失败,包应该停止。

如果出于某种原因,您仍然希望脚本任务成功并在此之后停止运行包,则可以在包中定义一个变量,例如ScriptFailure,数据类型为Int32。将其作为ReadWriteVariable添加到脚本任务中,然后在引发错误时将其设置为某个值,例如1,在脚本任务中

Dts.Variables("User::ScriptFailure").Value = 1

然后为与下一个任务的连接添加优先约束。选择表达式并将@[User::ScriptFailure] != 1作为表达式。如果ScriptFailure参数不等于1,则程序包将仅继续执行下一个任务。

第三种选择是致电RunningPackage.Stop()。我自己从来没有理由使用它,但这样的事情应该有效。

        Dim app As Application =  New Application() 
        Dim pkgs As RunningPackages =  app.GetRunningPackages("yourserver") 

        Dim p As RunningPackage
        For Each p In pkgs
            If p.PackageName = "MyPackageName"
                p.Stop
                Exit Sub
            End If
        Next

值得注意的是,根据上面链接中的文档调用Stop时,包不会立即停止

  

在发出停止请求和停止请求之间可能会有延迟   包裹实际停止的时间。