Obsługa zdarzeń SMO

Istnieją typy zdarzeń serwera, które można subskrypcji za pomocą obsługa zdarzeń i ServerConnection obiektu.

Wiele wystąpienie klasy w SQL Server Zarządzanie obiektami (SMO) mogą wyzwalać zdarzenia wystąpieniu określonych akcji na serwerze.

zdarzenie te mogą być obsłużone programowo przez definiowanie obsługa zdarzeń i subskrybowanie zdarzeń skojarzone.Tego typu zdarzenie obsługa jest przejściowy, ponieważ wszystkie subskrypcje są usuwane, gdy zamyka program kliencki SMO.

Obsługa zdarzenia ConnectionContext

ServerConnection Obiekt obsługuje kilka zdarzenie typów.właściwość zdarzenia musi być zestaw do wystąpienia programu obsługa zdarzeń właściwe oraz obsługa zdarzeń obiektu musi być zdefiniowany jako chronione funkcja, która obsługuje zdarzenie.

Subskrypcja zdarzeń

Obsługi zdarzeń, pisząc obsługa zdarzeń klasy utworzenie wystąpienie, przypisywanie obsługa zdarzeń obiektu nadrzędnego, a następnie subskrybowanie zdarzenia.

Klasa obsługi zdarzenie musi być napisana do obsługa zdarzeń.Klasy obsługa zdarzeń może zawierać więcej niż jednej funkcja obsługi zdarzenie i musi być zainstalowany dla obsługa zdarzeń.obsługa zdarzeń Funkcje odbierać informacje dotyczące zdarzeń z ServerEventNotificatificationArgs parametr, który może służyć do zgłaszania informacji dotyczących zdarzeń.

Typy zdarzeń bazy danych i serwera, które są obsługiwane są wymienione w DatabaseEventSet klasy oraz ServerEventSet klasy

Przykład

Aby używać dostarczonych przykładów kodu źródłowego, należy wybrać środowisko, szablon oraz język programowania, które będą używane do tworzenia aplikacji. Aby uzyskać więcej informacji, zobacz temat „Jak utworzyć projekt SMO języka Visual Basic w programie Visual Studio .NET” lub „Jak utworzyć projekt SMO języka Visual C# w programie Visual Studio .NET” w dokumentacji SQL Server — książki online.

Rejestrowanie procedur obsługi zdarzeń i subskrybowanie obsługi zdarzeń w języku Visual Basic

Poniższy przykład kodu pokazuje jak zestaw obsługa zdarzeń i sposób ich subskrybować zdarzenie w bazie danych.

'Create an event handler subroutine that runs when a table is created.
Private Sub MyCreateEventHandler(ByVal sender As Object, ByVal e As ServerEventArgs)
    Console.WriteLine("A table has just been added to the AdventureWorks2008R2 database.")
End Sub
'Create an event handler subroutine that runs when a table is deleted.
Private Sub MyDropEventHandler(ByVal sender As Object, ByVal e As ServerEventArgs)
    Console.WriteLine("A table has just been dropped from the AdventureWorks2008R2 database.")
End Sub
Sub Main()
    'Connect to the local, default instance of SQL Server.
    Dim srv As Server
    srv = New Server
    'Reference the AdventureWorks2008R2 database.
    Dim db As Database
    db = srv.Databases("AdventureWorks2008R2")
    'Create a database event set that contains the CreateTable event only.
    Dim databaseCreateEventSet As New DatabaseEventSet
    databaseCreateEventSet.CreateTable = True
    'Create a server event handler and set it to the first event handler subroutine.
    Dim serverCreateEventHandler As ServerEventHandler
    serverCreateEventHandler = New ServerEventHandler(AddressOf 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.
    Dim databaseDropEventSet As New DatabaseEventSet
    databaseDropEventSet.DropTable = True
    'Create a server event handler and set it to the second event handler subroutine.
    Dim serverDropEventHandler As ServerEventHandler
    serverDropEventHandler = New ServerEventHandler(AddressOf 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.
    Dim tb As Table
    tb = New Table(db, "Test_Table")
    Dim mycol1 As Column
    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.
    Dim x As Integer
    Dim y As Integer
    For x = 1 To 1000000000
        y = x * 2
    Next
    'Stop event handling.
    db.Events.StopEvents()





End Sub

Rejestrowanie procedur obsługi zdarzeń i subskrybowanie obsługi zdarzeń w języku Visual C#

Poniższy przykład kodu pokazuje jak zestaw obsługa zdarzeń i sposób ich subskrybować zdarzenie w bazie danych.

//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 AdventureWorks2008R2 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 AdventureWorks2008R2 database."); 
} 
public void Main() 
{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Reference the AdventureWorks2008R2 database. 
Database db; 
db = srv.Databases("AdventureWorks2008R2"); 
//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(); 
}