SSIS-发生错误时如何获取行号的脚本任务
如何在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
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?