Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS-发生错误时如何获取行号的脚本任务_Ssis - Fatal编程技术网

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

SSIS-发生错误时如何获取行号的脚本任务,ssis,Ssis,如何在SSIS脚本任务中的任何代码失败时捕获行号 下面的代码没有给出发生错误的行号 MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK) Dts.Events.FireError(1, ex.TargetSite.ToString(), ex.Message.ToString(), "", 0) Dts.TaskResult = ScriptResults.Fai

如何在SSIS脚本任务中的任何代码失败时捕获行号

下面的代码没有给出发生错误的行号

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


关于

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


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

根据@Edmund,我们无法获得行号。尝试使用ex.StackTrace获取有关错误/异常的更多信息。尝试在脚本任务中使用以下行

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

希望这有帮助

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

我发现另一个有用的方法是在C#console项目中编写我的方法,然后将工作逻辑推送到脚本组件中。SSIS 2012通过允许在组件内进行调试缓解了这一问题。我不同意代码量与此缺陷有关。即使是在不知道错误位置或导致错误的输入数据的情况下调试一个短脚本,也像是尝试一次仅限密文的加密攻击,这是最坏的情况。只需确保在部署包之前从脚本中取出所有
消息框。显示
调用。在生产服务器上挂起一个包,因为它正在等待有人单击“确定”
,这是。。。让人尴尬的是,说得委婉一点。@EdmundSchweppe-有没有办法将错误记录到SSIS变量指定的文件夹中,而不是使用messagebox?