Поделиться через


Обработка событий SMO

На некоторые типы событий сервера можно подписаться с помощью обработчика события и объекта ServerConnection.

Многие классы экземпляра SQL Server Management Objects (SMO) могут инициировать события при выполнении на сервере определенных действий.

Эти события можно обрабатывать программно, если установить обработчик события и подписаться на связанные события. Этот тип обработки событий является переходным, поскольку все подписки удаляются при завершении клиентской программы SMO.

Обработка события ConnectionContext

Объект ServerConnection поддерживает несколько типов событий. Свойство события необходимо задать равным экземпляру соответствующего обработчика события, а объект обработчика события следует определить как защищенную функцию, обрабатывающую событие.

Подписка на событие

Для обработки некоторого события пишется класс обработчика этого события, создается его экземпляр, этот обработчик события назначается родительскому объекту, затем производится подписка на данное событие.

Для обработки событий необходимо написать класс обработчика события. Класс обработчика события может содержать более одной функции обработки события, и его надо установить для обрабатываемых событий. Функции обработчика события получают информацию из параметра ServerEventNotificatificationArgs, который можно использовать для сообщения сведений о событии.

Типы событий баз данных и сервера, которые можно обрабатывать, перечислены в классах DatabaseEventSet и ServerEventSet.

Примеры

Чтобы использовать какой-либо из представленных примеров кода, необходимо выбрать среду, шаблон и язык программирования, с помощью которых будет создаваться приложение. Дополнительные сведения см. в разделе «Как создать проект Visual Basic SMO в Visual Studio .NET» или «Как создать проект Visual C# SMO в Visual Studio .NET» в электронной документации по SQL Server.

Регистрация обработчиков событий и подписка на обработку событий на языке Visual Basic .NET

Данный пример кода показывает, как установить обработчик события и подписаться на события базы данных.

'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 AdventureWorks 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 AdventureWorks database.")
End Sub
Sub Main()
    'Connect to the local, default instance of SQL Server.
    Dim srv As Server
    srv = New Server
    'Reference the AdventureWorks database.
    Dim db As Database
    db = srv.Databases("AdventureWorks")
    '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 occured.
    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