共用方式為


在指令碼工作中引發事件

事件會提供向包含封裝報告錯誤、警告和其他資訊 (例如工作進度或狀態) 的方法。 封裝會提供管理事件通知的事件處理常式。 指令碼工作可以呼叫 Dts 物件之 Events 屬性上的方法來引發事件。 如需有關 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 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 上的 Integration Services 頁面:


若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。

請參閱

工作

將事件處理常式加入封裝中

概念

Integration Services (SSIS) 事件處理常式