任务 3:添加错误流重定向
如上一个任务中所示,当 Lookup Currency Key 转换尝试对产生错误的已损坏示例平面文件进行处理时,该转换无法生成匹配。由于转换针对错误输出使用了默认设置,因此,任何错误都将导致该转换失败。当转换失败时,该包的其余部分也将失败。
可以使用错误输出将组件配置为将失败的行重定向到其他处理路径,而不是允许转换失败。使用单独的错误处理路径,您可以执行多项任务。例如,您可能要尝试清除该数据,然后重新处理失败的行。或者,您可能要将失败的行与其他错误信息保存在一起,以便以后进行验证和重新处理。
在本任务中,您将 Lookup Currency Key 转换配置为将所有失败的行重定向到错误输出。在数据流的错误分支中,这些行将被写入文件中。
默认情况下,Integration Services 错误输出中的另外两列(ErrorCode 和 ErrorColumn)只包含表示错误号的数值代码以及出现错误的列的 ID。这些数值的使用具有限制性,而且没有相应的错误说明。
若要更有效地使用错误输出,请在包将失败的行写入文件之前,使用脚本组件来访问 Integration Services API,然后获取错误说明。
配置错误输出
在**“工具箱”中,展开“数据流转换”,然后将“脚本组件”拖动到“数据流”选项卡上的设计图面。将“脚本”**放置在 Lookup Currency Key 转换的右侧。
在**“选择脚本组件类型”对话框中,单击“转换”,再单击“确定”**。
单击 Lookup Currency Key 转换,并将红色箭头拖动到新添加的**“脚本”**转换中,以连接这两个组件。
红色箭头表示 Lookup Currency Key 转换的错误输出。通过使用红色箭头将转换连接到脚本组件,您可以将所有处理错误重定向到脚本组件,然后,该组件会处理这些错误并将它们发送到目标。
在**“配置错误输出”对话框的“错误”列中,选择“重定向行”,再单击“确定”**。
在**“数据流”设计图面上,在新添加的“脚本组件”中单击“脚本组件”**,再将该名称更改为 Get Error Description。
双击 Get Error Description 转换。
在**“脚本转换编辑器”对话框中的“输入列”**页中,选择 ErrorCode 列。
在**“输入和输出”页中,展开“输出 0”,单击“输出列”,再单击“添加列”**。
在 Name 属性中,键入 ErrorDescription 并将 DataType 属性设置为 string [DT_WSTR]。
在**“脚本”页中,确保已将 LocaleID 属性设置为“英语(美国)”**。
单击**“编辑脚本”**以打开 Microsoft Visual Studio Tools for Applications (VSTA)。在 Input0_ProcessInputRow 方法中,键入或粘贴以下代码。
[Visual Basic]
Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)
[Visual C#]
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
已完成的子例程如以下代码所示。
[Visual Basic]
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) Row.ErrorDescription = Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode) End Sub
[Visual C#]
public override void Input0_ProcessInputRow(Input0Buffer Row) { Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode); }
生成脚本以保存所做的更改,然后关闭 VSTA。
单击**“确定”以关闭“脚本转换编辑器”**对话框。