3

当您的任何代码在 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

请指教

问候

4

3 回答 3

3

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

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

于 2012-11-23T02:21:13.027 回答
1

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

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

希望这可以帮助!

于 2012-11-23T04:45:52.070 回答
1

正如您所确定的,您无法从发布构建堆栈跟踪中获取行号。但是方法调用呢?也许您可以将长方法分解为多个方法调用,以帮助描述长方法的工作流程。发生错误时,您将有一个更短的检查方法。

于 2015-02-27T17:49:32.553 回答