我花了几个小时来弄清楚我的脚本转换出了什么问题。我有用于将数据从平面文件加载到数据库的 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
它可以完美地处理正确的数据,但是当出现像空白行这样的错误时,我想通过捕获 Exception 来捕获它,并用错误所在的行显示 MsgBox。但这不能按预期工作 - 在运行时,脚本转换失败并出现一般错误(用户脚本中的运行时错误)。奇怪的是,当我在 catch 块上设置断点时,在运行时,执行挂起,Visual Studio 编辑器打开和关闭,转换完成忽略任何错误......有人能帮忙吗?谢谢。