0

スクリプト変換の何が問題なのかを把握するために、過去数時間を費やしました。フラットファイルからデータベースにデータをロードするために使用される SSIS があります。このデータは非常に乱雑で、列数が可変で、空白行などがある場合があります。そのため、可変列数の問題を処理し、それらの空白行または予期しない改行を検出するスクリプト変換を作成しました。私のInput0_ProcessInputRowのコードは次のとおりです。

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    rowString = Row.Column0.Split(CType(";", Char()))


    If i = 1 Then 'grab tempalte version - first row & first col
        ver = rowString.GetValue(0).ToString()
    ElseIf i > Me.Variables.DataStart Then 'line where real data starts
        With Output0Buffer
            Try
                .AddRow()
                .ico = rowString.GetValue(0).ToString()
                .verze = Convert.ToInt16(rowString.GetValue(1))
                .schvalovatel = rowString.GetValue(2).ToString()
                .sloupec = rowString.GetValue(3).ToString()
                .radek = rowString.GetValue(4).ToString()
                .sablona = ver

                If rowString.GetUpperBound(0) < 6 Then 'last two missing
                    .tvalue_IsNull = True
                    .nvalue_IsNull = True
                Else
                    tString = rowString.GetValue(5).ToString()
                    If Not String.IsNullOrEmpty(tString) Then
                        .tvalue = tString
                    Else
                        .tvalue_IsNull = True
                    End If

                    nString = rowString.GetValue(6).ToString()
                    If Not String.IsNullOrEmpty(nString) Then
                        nString = Replace(nString, ".", ",")
                        .nvalue = Decimal.Parse(nString)
                    Else
                        .nvalue_IsNull = True
                    End If
                End If

            Catch ex As Exception
                MsgBox(i.ToString())  
                Me.ComponentMetaData.FireError(-1, "Script Component", "err: " _
                                      + Me.Variables.CurFile _
                                      + vbNewLine + "line: " + i.ToString() _
                                      + vbNewLine + "detail: " + ex.Message, String.Empty, 0, True)
            End Try


        End With
    End If

    i = i + 1

End Sub

正しいデータでは問題なく動作しますが、空白行などのエラーが発生した場合は、例外をキャッチしてこれをキャッチし、エラーのある行で MsgBox を表示したいと考えています。しかし、これは期待どおりには機能しません。実行時に、スクリプト変換は一般的なエラー (ユーザー スクリプトの実行時エラー) で失敗します。奇妙なことに、catch ブロックにブレークポイントを設定すると、実行時に実行が停止し、ビジュアル スタジオ エディターが開いたり閉じたりし、エラーを無視して変換が完了します...誰か助けてくれますか? ありがとう。

4

0 に答える 0