Aracılığıyla paylaş


SMO olaylarını işleme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'de Azure Synapse AnalyticsSQL veritabanı

Bir olay işleyicisi ve ServerConnection nesnesi kullanılarak abone olunabilecek sunucu olay türleri vardır.

SQL Server Yönetim Nesneleri'ndeki (SMO) örnek sınıflarının çoğu, sunucudaki belirli eylemler gerçekleştiğinde olayları tetikleyebilir.

Bu olaylar, bir olay işleyicisi ayarlanıp ilişkili olaylara abone olarak program aracılığıyla işlenebilir. SMO istemci programı çıktığında tüm abonelikler kaldırıldığından bu tür olay işleme geçicidir.

ConnectionContext olay işleme

ServerConnection nesnesi çeşitli olay türlerini destekler. Olay özelliği uygun bir olay işleyicisinin örneğine ayarlanmalıdır ve olay işleyici nesnesi olayı işleyen korumalı bir işlev olarak tanımlanmalıdır.

Etkinlik aboneliği

Olayları işlemek için bir olay işleyici sınıfı yazar, bunun bir örneğini oluşturur, olay işleyicisini üst nesneye atar ve sonra olaya abone olursunuz.

Olayları işlemek için bir olay işleyici sınıfı yazılmalıdır. Olay işleyicisi sınıfı birden fazla olay işleyici işlevi içerebilir ve olayların işlenmesi için yüklenmesi gerekir. Olay işleyici işlevleri, olay hakkındaki bilgileri raporlamak için kullanılabilecek ServerEventNotificatificationArgs parametresinden olay hakkında bilgi alır.

İşlenebilen veritabanı ve sunucu olaylarının türleri sınıfında ve DatabaseEventSetsınıfında listelenirServerEventSet.

Examples

Sağlanan herhangi bir kod örneğini kullanmak için programlama ortamını, programlama şablonunu ve uygulamanızın oluşturulacağı programlama dilini seçmeniz gerekir. Daha fazla bilgi için bkz. Visual Studio .NET'te Visual C# SMO Projesi Oluşturma.

.NET'te olay işleyicilerini kaydetme ve olay işlemeye abone olma

Aşağıdaki kod örnekleri, .NET'te olay işleyicisinin nasıl ayarlandığını ve veritabanı olaylarına nasıl abone oluneceğini gösterir.

Visual Basic

Bu kod örneği, olay işleyicisinin nasıl ayarlandığını ve veritabanı olaylarına nasıl abone olunyacağını gösterir.

'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