事件會提供向包含封裝報告錯誤、警告和其他資訊 (例如工作進度或狀態) 的方法。 封裝提供管理事件通知的事件處理常式。 腳本工作可以藉由在 對象的 屬性Events上Dts呼叫方法來引發事件。 如需 Integration Services 封裝如何處理事件的詳細資訊,請參閱 Integration Services (SSIS) 事件處理常式。
事件可以記錄到封裝中啟用的任何記錄提供者。 記錄提供者會在資料存放區中儲存事件的相關資訊。 指令碼工作也可以使用 Log 方法將資訊記錄到記錄提供者,而不會引發事件。 如需如何使用 Log 方法的詳細資訊,請參閱在指令碼工作中記錄。
為了引發事件,指令碼工作會呼叫 Events 屬性所公開的其中一個方法。 下表列出 Events 屬性所公開的方法。
| 事件 | 描述 |
|---|---|
| FireCustomEvent | 引發封裝中使用者定義的自訂事件。 |
| FireError | 通知封裝有關錯誤狀況。 |
| FireInformation | 提供資訊給使用者。 |
| FireProgress | 通知封裝有關工作的進度。 |
| FireQueryCancel | 傳回一個值,指出此封裝是否需要提前關閉工作。 |
| FireWarning | 通知封裝此工作是在需要使用者通知的狀態,但不是錯誤狀況。 |
事件範例
下列範例會示範如何在指令碼工作內引發事件。 此範例會使用原生 Windows API 函數來判斷是否可使用網際網路連接。 如果無任何可用的連接,則會引發錯誤。 如果正在使用可能不穩定的數據機連接,此範例會引發警告。 否則,它會傳回參考用訊息,表示已偵測到網際網路連接。
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 保持最新狀態
如需來自Microsoft的最新下載、文章、範例和影片,以及來自社群的所選解決方案,請流覽 MSDN 上的 Integration Services 頁面:
流覽 MSDN 上的 Integration Services 頁面
如需這些更新的自動通知,請訂閱頁面上可用的 RSS 摘要。