在脚本任务中引发事件

适用范围:SQL Server Azure 数据工厂中的 SSIS Integration Runtime

事件提供向包含包报告错误、警告和其他信息(如任务进度或状态)的方式。 包为管理事件通知提供事件处理程序。 脚本任务可通过对 Dts 对象的 Events 属性调用方法来引发事件。 有关 Integration Services 包如何处理事件的详细信息,请参阅 Integration Services (SSIS) 事件处理程序

事件可以记录到包中已启用的任何日志提供程序中。 日志提供程序在数据存储区中存储有关事件的信息。 脚本任务还可以使用 Log 方法将信息记录到日志提供程序中而不引发事件。 有关如何使用 Log 方法的详细信息,请参阅脚本任务中的日志记录

为了引发事件,脚本任务将调用由 Events 属性公开的方法之一。 下表列出了由 Events 属性公开的方法。

事件 描述
FireCustomEvent 引发包中用户定义的自定义事件。
FireError 将错误情况通知包。
FireInformation 为用户提供信息。
FireProgress 将任务的进度通知包。
FireQueryCancel 返回一个指示包是否需要提前关闭任务的值。
FireWarning 向包发出通知:任务处于有必要发出用户通知,但不是错误条件的状态。

事件示例

下面的示例演示如何从脚本任务内部引发事件。 该示例使用本机 Windows API 函数确定 Internet 连接是否可用。 如果没有可用的连接,则引发错误。 如果使用的调制解调器连接可能不稳定,则该示例将引发警告。 否则,返回已检测到 Internet 连接的信息性消息。

Private Declare Function InternetGetConnectedState Lib "wininet" _  
    (ByRef dwFlags As Long, ByVal dwReserved As Long) As Long  
  
Private Enum ConnectedStates  
    LAN = &H2  
    Modem = &H1  
    Proxy = &H4  
    Offline = &H20  
    Configured = &H40  
    RasInstalled = &H10  
End Enum  
  
Public Sub Main()  
  
    Dim dwFlags As Long  
    Dim connectedState As Long  
    Dim fireAgain as Boolean  
  
    connectedState = InternetGetConnectedState(dwFlags, 0)  
  
    If connectedState <> 0 Then  
        If (dwFlags And ConnectedStates.Modem) = ConnectedStates.Modem Then  
            Dts.Events.FireWarning(0, "Script Task Example", _  
                "Volatile Internet connection detected.", String.Empty, 0)  
        Else  
            Dts.Events.FireInformation(0, "Script Task Example", _  
                "Internet connection detected.", String.Empty, 0, fireAgain)  
        End If  
    Else  
        ' If not connected to the Internet, raise an error.  
        Dts.Events.FireError(0, "Script Task Example", _  
            "Internet connection not available.", String.Empty, 0)  
    End If  
  
    Dts.TaskResult = ScriptResults.Success  
  
End Sub  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime;  
using System.Windows.Forms;  
using System.Runtime.InteropServices;  
  
public class ScriptMain  
{  
  
[DllImport("wininet")]  
        private extern static long InternetGetConnectedState(ref long dwFlags, long dwReserved);  
  
        private enum ConnectedStates  
        {  
            LAN = 0x2,  
            Modem = 0x1,  
            Proxy = 0x4,  
            Offline = 0x20,  
            Configured = 0x40,  
            RasInstalled = 0x10  
        };  
  
        public void Main()  
        {  
            //  
            long dwFlags = 0;  
            long connectedState;  
            bool fireAgain = true;  
            int state;  
  
            connectedState = InternetGetConnectedState(ref dwFlags, 0);  
            state = (int)ConnectedStates.Modem;  
            if (connectedState != 0)  
            {  
                if ((dwFlags & state) == state)  
                {  
                    Dts.Events.FireWarning(0, "Script Task Example", "Volatile Internet connection detected.", String.Empty, 0);  
                }  
                else  
                {  
                    Dts.Events.FireInformation(0, "Script Task Example", "Internet connection detected.", String.Empty, 0, ref fireAgain);  
                }  
            }  
            else  
            {  
                // If not connected to the Internet, raise an error.  
                Dts.Events.FireError(0, "Script Task Example", "Internet connection not available.", String.Empty, 0);  
            }  
  
            Dts.TaskResult = (int)ScriptResults.Success;  
  
        }  
  

另请参阅

Integration Services (SSIS) 事件处理程序
在包中添加事件处理程序