SSIS - 脚本任务如何在发生错误时获取获取行号

时间:2012-11-22 14:51:37

标签: ssis

当SSIS脚本任务中的任何代码失败时,如何捕获LINE NUMBER

以下代码未提供发生错误的行号。

        MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK)
        Dts.Events.FireError(1, ex.TargetSite.ToString(), ex.Message.ToString(), "", 0)
        Dts.TaskResult = ScriptResults.Failure

请咨询

此致

3 个答案:

答案 0 :(得分:3)

我非常确定堆栈跟踪中的行号不可用到脚本任务。我不相信SSIS用于脚本任务和组件的Visual Studio Tools for Applications(VSTA)可以设置为允许脚本本身的调试版本。如果没有调试信息,.NET运行时无法确定哪个源代码行与发生错误的已编译代码中的指令相对应。

然而,坦率地说,如果你在特定的脚本任务中有如此多的代码,你需要行号来导航它,那么你就有了更大的问题。我建议您将该功能移动到自定义任务中,或者至少将复杂代码放入可以从脚本任务中引用的单独.NET程序集中。脚本任务非常适合于少量代码,但作为一个完整的开发环境,与“真正的”Visual Studio相比,VSTA很糟糕。

答案 1 :(得分:1)

根据@Edmund,我们无法获得行号。尝试使用ex.StackTrace来更深入地了解错误/异常。尝试在脚本任务中使用以下行。

MessageBox.Show(ex.StackTrace, "Error", MessageBoxButtons.OK)
Dts.Events.FireError(1, "Component Name", ex.StackTrace, "", 0)
Dts.TaskResult = ScriptResults.Failure

希望这有帮助!

答案 2 :(得分:1)

如您所知,您无法从发布构建堆栈跟踪中获取行号。但是方法调用怎么样?也许您可以将长方法分解为多个方法调用,这些方法调用有助于描述较长方法的工作流程。发生错误时,您可以使用更短的方法进行检查。

相关问题