SSIS脚本任务:FireError()挂在Catch块中

时间:2018-07-16 16:20:44

标签: c# sql-server ssis winscp-net

使用SQL Server2014。我有一个脚本任务,该任务通过WinSCPnet.dll程序集下载文件,在这里我试图通过catch块中的FireError()将错误记录到SSIS日志中。不幸的是,当程序到达FireError()时,它只是挂起而没有失败或没有任何消息。我没有遵循MSDN上提供的示例(请参见下面的代码),但没有成功。谁能帮忙吗?

注意:我有一个FireInformation()事件,该事件在成功下载后将起作用。

https://docs.microsoft.com/en-us/sql/integration-services/extending-packages-scripting/task/logging-in-the-script-task?view=sql-server-2014

    public void Main()
    {
        // Set variable declaration(s).            
        string strTaskName = (string)Dts.Variables["System::TaskName"].Value; // Has been selected as read-only.

        SessionOptions sessionOptions = new SessionOptions
        {
            // Set SessionOptions here
        };

        try
        {
            using (Session session = new Session())
            {
                // Create error here by downloading a file from a folder path that does not exist.

                foreach (TransferEventArgs transfer in transferOperationResult.Transfers)
                {
                    // Print results to SSIS log. The FireInformation() works here.
                    Dts.Events.FireInformation(0, string.Format("Script Task {0}", strTaskName), string.Format("Download of file {0} succeeded.", transfer.FileName), null, 0, ref fireAgain);
                }
            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }
        catch (Exception ex)
        {                
            // Print results to SSIS log. The program hangs here without message.
            Dts.Events.FireError(0, string.Format("Script Task {0}", strTaskName), ex.Message, null, 0);

            Dts.TaskResult = (int)ScriptResults.Failure;
        }
    }

1 个答案:

答案 0 :(得分:0)

发现了问题。我有一个OnError事件处理程序设置,可以在任何任务失败时发送电子邮件。问题源于“发送邮件任务”选择了错误的连接管理器这一事实。我通过逐字地运行逻辑链上的每个任务(即右键单击+执行任务)来发现问题,从而发现了问题,并在“发送邮件任务”处结束,该消息告诉我找不到连接管理器。

奇怪的是,当试图运行整个程序包时,SSIS调试器未在执行结果中报告相同的错误。我不知道这是正常/预期的行为。脚本任务,错误事件处理程序和发送邮件任务之间可能存在错误?