Gestion des événements SMO

Il existe des types d'événement de serveur auxquels il est possible de s'abonner en utilisant un gestionnaire d'événements et l'objet ServerConnection.

De nombreuses classes d'instance dans SMO SQL Server Management Objects) peuvent déclencher des événements lorsque certaines actions se produisent sur le serveur.

Ces événements peuvent être contrôlés par programme en installant un gestionnaire d'événements et en s'abonnant aux événements associés. Ce type de gestion des événements est transitoire car tous les abonnements sont supprimés lorsque le programme client SMO prend fin.

Gestion des événements ConnectionContext

L'objet ServerConnection prend en charge plusieurs types d'événement. La propriété d'événement doit être définie sur une instance d'un gestionnaire d'événements approprié, et l'objet gestionnaire d'événements doit être défini comme une fonction protégée qui gère l'événement.

Abonnement à un événement

Pour gérer des événements, vous devez écrire une classe de gestionnaire d'événements, créer une instance de cet événement, attribuer le gestionnaire d'événements à l'objet parent, puis vous abonner à l'événement.

La gestion d'événements requiert l'écriture d'une classe de gestionnaire d'événements. La classe de gestionnaire d'événements peut contenir plusieurs fonctions de gestionnaire d'événements et doit être installée pour les événements à gérer. Les fonctions du gestionnaire d'événements reçoivent des informations sur l'événement en provenance du paramètre ServerEventNotificatificationArgs, qui peut être utilisé pour transmettre les information relatives à l'événement.

Les types d'événements de base de données et de serveur qui peuvent être gérées sont répertoriés dans la classe DatabaseEventSet et la classe ServerEventSet.

Exemple

Pour utiliser un exemple de code fourni, vous devrez sélectionner l'environnement, le modèle et le langage de programmation dans lequel créer votre application. Pour plus d'informations, consultez « Procédure : créer un projet Visual Basic SMO dans Visual Studio .NET » ou « Procédure : créer un projet Visual C# SMO dans Visual Studio .NET » dans la documentation en ligne de SQL Server.

Enregistrement de gestionnaires d'événements et abonnement à la gestion des événements en Visual Basic

Cet exemple de code montre comment configurer le gestionnaire d'événements et comment s'abonner aux événements de base de données.

'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

Enregistrement de gestionnaires d'événements et abonnement à la gestion des événements en Visual C#

Cet exemple de code montre comment configurer le gestionnaire d'événements et comment s'abonner aux événements de base de données.

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