Gérer les événements SMO
S’applique à : SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
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.
La plupart des classes d’instance dans SQL Server Management Objects (SMO) peuvent déclencher des événements lorsque certaines actions sur le serveur se produisent.
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 à partir du paramètre ServerEventNotificatificationArgs qui peuvent être utilisées pour signaler des informations sur l’événement.
Les types d’événements de base de données et de serveur qui peuvent être gérés sont répertoriés dans la DatabaseEventSet classe et la ServerEventSetclasse.
Exemples
Pour utiliser un exemple de code fourni, vous devez choisir l’environnement de programmation, le modèle de programmation et le langage de programmation dans lequel créer votre application. Pour plus d’informations, consultez Comment créer un projet SMO Visual C# dans Visual Studio .NET.
Inscrire des gestionnaires d’événements et s’abonner à la gestion des événements dans .NET
Les exemples de code suivants montrent comment configurer le gestionnaire d’événements et comment s’abonner aux événements de base de données, dans .NET.
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 AdventureWorks2022 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 AdventureWorks2022 database.")
End Sub
Sub Main()
'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2022 database.
Dim db As Database
db = srv.Databases("AdventureWorks2022")
'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 occurred.
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