Freigeben über


Bearbeitung von SMO-Ereignissen

Es gibt Serverereignistypen, die mithilfe eines Ereignishandlers und des ServerConnection Objekts abonniert werden können.

Viele der Instanzklassen in SQL Server Management Objects (SMO) können Ereignisse auslösen, wenn bestimmte Aktionen auf dem Server auftreten.

Diese Ereignisse können programmgesteuert behandelt werden, indem sie einen Ereignishandler einrichten und die zugehörigen Ereignisse abonnieren. Diese Art der Ereignisbehandlung ist vorübergehend, da alle Abonnements entfernt werden, wenn das SMO-Clientprogramm beendet wird.

ConnectionContext-Ereignisbehandlung

Das ServerConnection Objekt unterstützt mehrere Ereignistypen. Die Ereigniseigenschaft muss auf eine Instanz eines geeigneten Ereignishandlers festgelegt werden, und das Ereignishandlerobjekt muss als geschützte Funktion definiert werden, die das Ereignis behandelt.

Ereignisabonnement

Sie behandeln Ereignisse, indem Sie eine Ereignishandlerklasse schreiben, eine Instanz davon erstellen, den Ereignishandler dem übergeordneten Objekt zuweisen und dann das Ereignis abonnieren.

Eine Ereignishandlerklasse muss zum Behandeln von Ereignissen geschrieben werden. Die Ereignishandlerklasse kann mehr als eine Ereignishandlerfunktion enthalten und muss installiert werden, damit die Ereignisse behandelt werden. Die Ereignishandlerfunktionen empfangen Informationen zum Ereignis vom ServerEventNotificatificationArgs-Parameter , der zum Melden von Informationen zum Ereignis verwendet werden kann.

Die Typen von Datenbank- und Serverereignissen, die behandelt werden können, sind in der DatabaseEventSet Klasse und der ServerEventSetKlasse aufgeführt.

Beispiel

Um ein codebeispiel zu verwenden, das bereitgestellt wird, müssen Sie die Programmierumgebung, die Programmiervorlage und die Programmiersprache auswählen, in der Ihre Anwendung erstellt werden soll. Weitere Informationen finden Sie unter "How to: Create a Visual Basic SMO Project in Visual Studio .NET" oder "How to: Create a Visual C# SMO Project in Visual Studio .NET" in SQL Server Books Online.

Registrieren von Ereignishandlern und Abonnieren der Ereignisbehandlung in Visual Basic

In diesem Codebeispiel wird veranschaulicht, wie der Ereignishandler eingerichtet wird und wie Sie die Datenbankereignisse abonnieren.

Registrieren von Ereignishandlern und Abonnieren der Ereignisbehandlung in Visual C#

In diesem Codebeispiel wird veranschaulicht, wie der Ereignishandler eingerichtet wird und wie Sie die Datenbankereignisse abonnieren.

//Create an event handler subroutine that runs when a table is created.   
private void MyCreateEventHandler(object sender, ServerEventArgs e)   
{   
Console.WriteLine("A table has just been added to the AdventureWorks2012 database.");   
}   
//Create an event handler subroutine that runs when a table is deleted.   
private void MyDropEventHandler(object sender, ServerEventArgs e)   
{   
Console.WriteLine("A table has just been dropped from the AdventureWorks2012 database.");   
}   
public void Main()   
{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Reference the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
//Create a database event set that contains the CreateTable event only.   
DatabaseEventSet databaseCreateEventSet = new DatabaseEventSet();   
databaseCreateEventSet.CreateTable = true;   
//Create a server event handler and set it to the first event handler subroutine.   
ServerEventHandler serverCreateEventHandler;   
serverCreateEventHandler = new ServerEventHandler(MyCreateEventHandler);   
//Subscribe to the first server event handler when a CreateTable event occurs.   
db.Events.SubscribeToEvents(databaseCreateEventSet, serverCreateEventHandler);   
    //Create a database event set that contains the DropTable event only.   
DatabaseEventSet databaseDropEventSet = new DatabaseEventSet();   
databaseDropEventSet.DropTable = true;   
//Create a server event handler and set it to the second event handler subroutine.   
ServerEventHandler serverDropEventHandler;   
serverDropEventHandler = new ServerEventHandler(MyDropEventHandler);   
//Subscribe to the second server event handler when a DropTable event occurs.   
db.Events.SubscribeToEvents(databaseDropEventSet, serverDropEventHandler);   
//Start event handling.   
db.Events.StartEvents();   
//Create a table on the database.   
Table tb;   
tb = new Table(db, "Test_Table");   
Column mycol1;   
mycol1 = new Column(tb, "Name", DataType.NChar(50));   
mycol1.Collation = "Latin1_General_CI_AS";   
mycol1.Nullable = true;   
tb.Columns.Add(mycol1);   
tb.Create();   
//Remove the table.   
tb.Drop();   
//Wait until the events have occured.   
int x;   
int y;   
for (x = 1; x <= 1000000000; x++) {   
    y = x * 2;   
}   
//Stop event handling.   
db.Events.StopEvents();   
}