Freigeben über


Auslösen von Ereignissen im Skripttask

Ereignisse bieten eine Möglichkeit, Fehler, Warnungen und andere Informationen, wie z. B. den Fortschritt oder Status eines Tasks, an das entsprechende Paket zu melden. Das Paket stellt Ereignishandler zum Verwalten von Ereignisbenachrichtigungen bereit. Der Skripttask kann Ereignisse durch Aufrufen der Methoden in der Events-Eigenschaft des Dts-Objekts auslösen. Weitere Informationen dazu, wie Integration Services-Pakete Ereignisse behandeln, finden Sie unter Integration Services-Ereignishandler (SSIS).

Ereignisse können in jedem Protokollanbieter protokolliert werden, der im Paket aktiviert wird. Protokollanbieter speichern Informationen über Ereignisse in einem Datenspeicher. Der Skripttask kann ebenfalls die Log-Methode verwenden, um Informationen in einem Protokollanbieter zu protokollieren, ohne ein Ereignis auszulösen. Weitere Informationen zur Verwendung der Log-Methode finden Sie unter Protokollieren im Skripttask.

Um ein Ereignis auszulösen, ruft der Skripttask eine der Methoden auf, die von der Events-Eigenschaft verfügbar gemacht werden. In der folgenden Tabelle werden die Methoden aufgelistet, die von der Events-Eigenschaft verfügbar gemacht werden.

Ereignis

Beschreibung

FireCustomEvent

Löst ein benutzerdefiniertes Ereignis im Paket aus.

FireError

Informiert das Paket über eine Fehlerbedingung.

FireInformation

Stellt Informationen für den Benutzer bereit.

FireProgress

Informiert das Paket über den Fortschritt des Tasks.

FireQueryCancel

Gibt einen Wert zurück, der angibt, ob das Paket erfordert, dass der Task vorzeitig geschlossen wird.

FireWarning

Informiert das Paket darüber, dass der Task einen Status aufweist, der eine Benutzerbenachrichtigung erfordert, bei dem es sich jedoch nicht um eine Fehlerbedingung handelt.

Beispiel für ein Ereignis

Im folgenden Beispiel wird veranschaulicht, wie Ereignisse innerhalb des Skripttasks ausgelöst werden können. Im Beispiel wird eine systemeigene Windows-API-Funktion verwendet, um zu bestimmen, ob eine Internetverbindung verfügbar ist. Wenn keine Verbindung verfügbar ist, wird ein Fehler ausgelöst. Wenn eine potenziell flüchtige Modemverbindung in Gebrauch ist, wird im Beispiel eine Warnung ausgelöst. Andernfalls wird die Informationsmeldung zurückgegeben, dass eine Internetverbindung erkannt wurde.

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 (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf MSDN auf der Integration Services-Seite:


Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Updates zu erhalten.

Siehe auch

Aufgaben

Hinzufügen eines Ereignishandlers zu einem Paket

Konzepte

Integration Services-Ereignishandler (SSIS)