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 Ereignishandler von SQL Server Integration Services.
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 |
---|---|
Löst ein benutzerdefiniertes Ereignis im Paket aus. |
|
Informiert das Paket über eine Fehlerbedingung. |
|
Stellt Informationen für den Benutzer bereit. |
|
Informiert das Paket über den Fortschritt des Tasks. |
|
Gibt einen Wert zurück, der angibt, ob das Paket erfordert, dass der Task vorzeitig geschlossen wird. |
|
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;
}
|
Siehe auch