Gestion des événements SMO

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.

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.

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 T:Microsoft.SqlServer.Management.Smo.DatabaseEventSet et la classe T:Microsoft.SqlServer.Management.Smo.ServerEventSet.

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.

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

[!CODE [SMO How to#SMO_VBEvents1](SMO How to#SMO_VBEvents1)]

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

Afficher:
© 2016 Microsoft