2012-01-20 24 views
0

次のスクリプトでインデックスが範囲外になりました。私は1つの入力列と11の出力列をSSISスクリプトコンポーネントに追加しました。これらすべてのデータ型は文字列です。どこが間違っているのか分かりません。 ありがとうございました。餃子にvb.netスクリプトでインデックスの範囲外エラーが発生しました

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    Dim strRow As String 
    Dim strColSeperator As String 
    Dim rowValues As String() 
    strRow = Row.Line.ToString() 
    If strRow.Contains("-") Then 
     strColSeperator = ("-") 
    ElseIf strRow.Contains(";") Then 
     strColSeperator = ";" 
    End If 

    rowValues = Row.Line.Split(CChar(strColSeperator)) 
    Row.Invoices = rowValues.GetValue(0).ToString() 
    Row.Detail = rowValues.GetValue(1).ToString() 
    Row.Date = rowValues.GetValue(2).ToString() 
    Row.Something1 = rowValues.GetValue(3).ToString() 
    Row.Something2 = rowValues.GetValue(4).ToString() 
    Row.SomeNumber = rowValues.GetValue(5).ToString() 
    Row.CustomerName = rowValues.GetValue(6).ToString() 
    Row.InvoiceNumber = rowValues.GetValue(7).ToString() 
    Row.InvoiceNumber2 = rowValues.GetValue(8).ToString() 
    Row.InvoiceNumber3 = rowValues.GetValue(9).ToString() 
    Row.InvoiceNumber4 = rowValues.GetValue(10).ToString() 

End Sub 
+0

ドルは、あなたがそこにskunkyデータを持っています。スクリプト変換で、問題の行をキャッチするために2番目の出力(出力1)を追加します。既存のデータ型に一致する列を出力1に追加します。上記のコードをtry/catchブロックで囲みます。キャッチ部分に、これら2行の 'Output1Buffer.AddRow()'と 'Output1Buffer.Line = Row.Line'を追加します。それらをファイルに追加したり、データビューアを追加して、期待されるサイズに分割できない理由を確認します。 – billinkc

答えて

0
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    Dim strRow As String 
    Dim strColSeperator As Char ' <== Char instead of string 
    Dim rowValues As String() 

    strRow = Row.Line.ToString() 
    If strRow.Contains("-") Then 
     strColSeperator = "-"c ' <== the 'c' denotes a Char literal 
    ElseIf strRow.Contains(";") Then 
     strColSeperator = ";"c 
    End If 

    rowValues = strRow.Split(strColSeperator) ' <== Now CChar is obsolete 
    MsgBox("rowValues length = " & rowValues.Length) ' <== Check to see if it's really as long as expected! 
    Row.Invoices = rowValues(0) ' <== Use the array indexer instead of GetValue and ToString 
    Row.Detail = rowValues(1) 
    Row.Date = rowValues(2) 
    Row.Something1 = rowValues(3) 
    Row.Something2 = rowValues(4) 
    Row.SomeNumber = rowValues(5) 
    Row.CustomerName = rowValues(6) 
    Row.InvoiceNumber = rowValues(7) 
    Row.InvoiceNumber2 = rowValues(8) 
    Row.InvoiceNumber3 = rowValues(9) 
    Row.InvoiceNumber4 = rowValues(10) 
End Sub 
+0

Oliver、あなたが提供したコードを実行しました。それはしばらくの間、メッセージボックスにほとんど11と12を表示します(約14回)。 14回のクリックが7回続いた後、同じ問題で再び失敗します。最初の20行ほどのデータとそのデータをチェックしました。何が起こっているのでしょうか? – rvphx

+2

実際に何が含まれているかを見るために 'strRow'を表示してみてください。私の推測では、間違った区切り記号を使用しています。セパレータが ";"行にマイナス記号( " - ")を含む負の値が含まれていますか? –

関連する問題