Compartir a través de


Controlar eventos SMO

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Hay tipos de evento de servidor a los que se puede suscribir utilizando un controlador de eventos y el objeto ServerConnection.

Muchas de las clases de instancia de OBJETOS de administración de SQL Server (SMO) pueden desencadenar eventos cuando se producen determinadas acciones en el servidor.

Estos eventos se pueden administrar mediante programación preparando un controlador de eventos y suscribiéndose a los eventos asociados. Este tipo de control de eventos es transitorio porque se quitan todas las suscripciones cuando se sale del programa cliente de SMO.

control de eventos Conectar ionContext

Los objetos ServerConnection admiten varios tipos de evento. La propiedad del evento debe estar establecida en una instancia de un controlador de eventos adecuado y el objeto de controlador de eventos se debe definir como una función protegida que administra el evento.

Suscripción a evento

Administra los eventos escribiendo una clase de controlador de eventos, creando una instancia de él, asignando el controlador de eventos al objeto primario y suscribiéndose a continuación al evento.

Una clase de controlador de eventos se debe escribir para administrar los eventos. La clase de controlador de eventos puede contener más de una función de controlador de eventos y se debe instalar para los eventos que se van a administrar. Las funciones del controlador de eventos reciben información sobre el evento del parámetro ServerEventNotificatificationArgs que se puede usar para notificar información sobre el evento.

Los tipos de eventos de base de datos y servidor que se pueden controlar se muestran en la DatabaseEventSet clase y la ServerEventSetclase .

Ejemplos

Para usar cualquier ejemplo de código que se proporcione, debe elegir el entorno de programación, la plantilla de programación y el lenguaje de programación en el que se va a crear la aplicación. Para obtener más información, vea How to Create a Visual C# SMO Project in Visual Studio .NET (Cómo crear un proyecto de SMO de Visual C# en Visual Studio .NET).

Registro de controladores de eventos y suscripción al control de eventos en .NET

En los ejemplos de código siguientes se muestra cómo configurar el controlador de eventos y cómo suscribirse a los eventos de base de datos, en .NET.

Visual Basic

En este ejemplo de código se muestra cómo configurar el controlador de eventos y cómo suscribirse a los eventos de base de datos.

'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