Gestione degli eventi SMO

Vi sono tipi di eventi del server che possono essere sottoscritti tramite un gestore di eventi e l'oggetto ServerConnection.

Molte delle classi di istanze in SMO (SQL Server Management Objects) possono attivare eventi quando si verificano determinate azioni nel server.

Questi eventi possono essere gestiti a livello di codice configurando un gestore evento e sottoscrivendo gli eventi associati. Questo tipo di gestione degli eventi è temporanea perché quando viene chiuso il programma client SMO vengono rimosse tutte le sottoscrizioni.

Gestione degli eventi ConnectionContext

L'oggetto ServerConnection supporta diversi tipi di evento. La proprietà dell'evento deve essere impostata su un'istanza di un gestore evento appropriato e l'oggetto gestore evento deve essere definito come una funzione protetta che gestisce l'evento.

Sottoscrizione di eventi

Per gestire gli eventi è necessario scrivere una classe del gestore evento, crearne un'istanza, assegnare il gestore evento all'oggetto padre e infine effettuare la sottoscrizione all'evento.

Per gestire gli eventi, è necessario scrivere una classe del gestore evento. La classe del gestore evento può contenere più di una funzione del gestore evento e deve essere installata per poter gestire gli eventi. Le funzioni del gestore evento ricevono informazioni sull'evento dal parametro ServerEventNotificatificationArgs che può essere utilizzato per segnalare informazioni sull'evento.

I tipi di eventi del database e del server che possono essere gestiti sono elencati nella classe DatabaseEventSet e nella classe ServerEventSet.

Esempio

Per utilizzare qualsiasi esempio di codice fornito, è necessario scegliere l'ambiente di programmazione, il modello di programmazione e il linguaggio di programmazione per la creazione dell'applicazione. Per ulteriori informazioni, vedere "Procedura: Creare un progetto Visual Basic SMO in Visual Studio .NET" o "Procedura: Creare un progetto Visual C# SMO in Visual Studio .NET" nella documentazione online di SQL Server.

Registrazione di gestori di eventi e sottoscrizione della gestione degli eventi in Visual Basic

In questo esempio di codice viene illustrato come configurare il gestore dell'evento e come effettuare la sottoscrizione degli eventi del database.

'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 AdventureWorks2012 2008 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 AdventureWorks2012 2008 database.")
End Sub
Sub Main()
    'Connect to the local, default instance of SQL Server.
    Dim srv As Server
    srv = New Server
    'Reference the AdventureWorks2012 database.
    Dim db As Database
    db = srv.Databases("AdventureWorks2012")
    '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

Registrazione di gestori di eventi e sottoscrizione della gestione degli eventi in Visual C#

In questo esempio di codice viene illustrato come configurare il gestore dell'evento e come effettuare la sottoscrizione degli eventi del database.

//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(); 
}