Delen via


SMO-gebeurtenissen verwerken

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric Preview

Er zijn servergebeurtenistypen waarop u zich kunt abonneren met behulp van een gebeurtenis-handler en het ServerConnection object.

Veel van de exemplaarklassen in SMO (SQL Server Management Objects) kunnen gebeurtenissen activeren wanneer bepaalde acties op de server plaatsvinden.

Deze gebeurtenissen kunnen programmatisch worden verwerkt door een gebeurtenis-handler in te stellen en u te abonneren op de bijbehorende gebeurtenissen. Dit type gebeurtenisafhandeling is tijdelijk omdat alle abonnementen worden verwijderd wanneer het SMO-clientprogramma wordt afgesloten.

Verwerking van ConnectionContext-gebeurtenissen

Het ServerConnection object ondersteunt verschillende gebeurtenistypen. De gebeurteniseigenschap moet worden ingesteld op een exemplaar van een geschikte gebeurtenis-handler en het gebeurtenis-handlerobject moet worden gedefinieerd als een beveiligde functie die de gebeurtenis verwerkt.

Event subscription

U verwerkt gebeurtenissen door een gebeurtenis-handlerklasse te schrijven, een exemplaar ervan te maken, de gebeurtenis-handler toe te wijzen aan het bovenliggende object en vervolgens te abonneren op de gebeurtenis.

Een gebeurtenis-handlerklasse moet worden geschreven om gebeurtenissen te verwerken. De gebeurtenis-handlerklasse kan meer dan één gebeurtenis-handlerfunctie bevatten en moet worden geïnstalleerd voor de gebeurtenissen die moeten worden verwerkt. De gebeurtenis-handlerfuncties ontvangen informatie over de gebeurtenis van de parameter ServerEventNotificatificationArgs die kan worden gebruikt om informatie over de gebeurtenis te rapporteren.

De typen database- en servergebeurtenissen die kunnen worden verwerkt, worden vermeld in de DatabaseEventSet klasse en de ServerEventSetklasse.

Examples

Als u een codevoorbeeld wilt gebruiken dat is opgegeven, moet u de programmeeromgeving, de programmeersjabloon en de programmeertaal kiezen waarin u uw toepassing wilt maken. Zie Een Visual C# SMO-project maken in Visual Studio .NET voor meer informatie.

Gebeurtenis-handlers registreren en abonneren op gebeurtenisafhandeling in .NET

In de volgende codevoorbeelden ziet u hoe u de gebeurtenis-handler instelt en hoe u zich abonneert op de database-gebeurtenissen in .NET.

Visual Basic

In dit codevoorbeeld ziet u hoe u de gebeurtenis-handler instelt en hoe u zich abonneert op de database-gebeurtenissen.

'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