SSIS Script Task supress onerror - PullRequest
       78

SSIS Script Task supress onerror

0 голосов
/ 14 февраля 2019

У меня есть сценарий, который загружает файл, используя объект подключения HTTP.Эта задача скрипта является частью пакета, который вызывается другим пакетом.Иногда соединение не может быть установлено.В этих случаях я хочу повторить попытку подключения несколько раз, прежде чем, наконец, выдаст ошибку, если попытки подключения потерпят неудачу.

Я пытался реализовать это.Оказалось, работает, и задача не терпит неудачу.Однако событие OnError по-прежнему распространяется каждый раз, когда возникает исключение в задаче сценария, даже если задача сценария не завершается с ошибкой.Ошибка происходит, когда управление передается из дочернего пакета обратно в родительский пакет.

Public Sub Main()
Dim tryTimes As Integer = 0 
Dim maxTimes As Integer = 4 
While (True) 
    Try
        Dim nativeObject As Object = Dts.Connections("HTTP Connection Manager").AcquireConnection(Nothing)
            'Create a new HTTP client connection
        Dim connection As New HttpClientConnection(nativeObject)
        Dim filename As String = Dts.Variables("Working_File").Value
        connection.DownloadFile(filename, True)
        Dts.TaskResult = ScriptResults.Success
        Exit While
    Catch ex As Exception
        If (tryTimes < maxTimes) Then
            tryTimes = tryTimes + 1
            Thread.Sleep(30000) 
        Else 
            MsgBox(ex.Message)
            Dts.TaskResult = ScriptResults.Failure
            Throw
        End If
    End Try
End While
End Sub

Я надеюсь получить решение, при котором событие OnError не вызывается, если попытки подключения не завершаются определенное количество раз,

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы захотите использовать метку вне попытки и GoTo в вашем улове

    Public Sub Main()
        Dim tryTimes As Integer = 0
        Dim maxTimes As Integer = 4

RunCode: 'Label here
        While (True)

            Try
                'your code here

                Exit While
            Catch ex As Exception
                If (tryTimes < maxTimes) Then
                    tryTimes = tryTimes + 1
                    Thread.Sleep(30000)
                    GoTo RunCode 'after we catch the exception and eval tryTimes go back and retry
                Else

                    'MsgBox(ex.Message)
                    Dts.Events.FireError(-1, "", "Error message: " & ex.ToString(), "", 0)
                    Dts.TaskResult = ScriptResults.Failure
                    'Throw
                End If
            End Try
        End While
    End Sub
0 голосов
/ 14 февраля 2019

Попробуйте написать один и тот же код: выведите предупреждение на первых 4 пробах и на 5 пробе выдает ошибку, я не уверен, сработает ли она:

Public Sub Main()
    Dim tryTimes As Integer = 0 
    Dim maxTimes As Integer = 4 
    While (True) 
        Try
            Dim nativeObject As Object = Dts.Connections("HTTP Connection Manager").AcquireConnection(Nothing)
                'Create a new HTTP client connection
            Dim connection As New HttpClientConnection(nativeObject)
            Dim filename As String = Dts.Variables("Working_File").Value
            connection.DownloadFile(filename, True)
            Dts.TaskResult = ScriptResults.Success
            Exit While
        Catch ex As Exception
            If (tryTimes < maxTimes) Then
                tryTimes = tryTimes + 1
                Dts.Events.FireWarning(0, "Error ignored", _
                        "Retrying in 30 seconds", String.Empty, 0)
                Thread.Sleep(30000) 
            Else 
                Dts.Events.FireError(-1, "", "Error message: " & ex2.ToString(), "", 0)
                Dts.TaskResult = ScriptResults.Failure

            End If
        End Try
    End While
End Sub

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...