在脚本任务中引发事件
事件提供向包含包报告错误、警告和其他信息(如任务进度或状态)的方式。 包为管理事件通知提供事件处理程序。 脚本任务可以通过对 Dts 对象的 Events 属性调用方法来引发事件。 有关 Integration Services 包如何处理事件的详细信息,请参阅 Integration Services (SSIS) 事件处理程序。
事件可以记录到包中已启用的任何日志提供程序中。 日志提供程序在数据存储区中存储有关事件的信息。 脚本任务还可以使用 Log 方法将信息记录到日志提供程序中而不引发事件。 有关如何使用 Log 方法的详细信息,请参阅脚本任务中的日志记录。
为了引发事件,脚本任务将调用由 Events 属性公开的方法之一。 下表列出了由 Events 属性公开的方法。
事件 |
说明 |
---|---|
引发包中用户定义的自定义事件。 |
|
将错误情况通知包。 |
|
为用户提供信息。 |
|
将任务的进度通知包。 |
|
返回一个指示包是否需要提前关闭任务的值。 |
|
向包发出通知:任务处于有必要发出用户通知,但不是错误条件的状态。 |
事件示例
下面的示例演示如何从脚本任务内部引发事件。 该示例使用本机 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;
}
|