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


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

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

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

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

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

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

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

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

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

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

Пример

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

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

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

Регистрация обработчиков событий и подписка на обработку событий в Visual C#

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

//Create an event handler subroutine that runs when a table is created.   
private void MyCreateEventHandler(object sender, ServerEventArgs e)   
{   
Console.WriteLine("A table has just been added to the AdventureWorks2012 database.");   
}   
//Create an event handler subroutine that runs when a table is deleted.   
private void MyDropEventHandler(object sender, ServerEventArgs e)   
{   
Console.WriteLine("A table has just been dropped from the AdventureWorks2012 database.");   
}   
public void Main()   
{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Reference the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
//Create a database event set that contains the CreateTable event only.   
DatabaseEventSet databaseCreateEventSet = new DatabaseEventSet();   
databaseCreateEventSet.CreateTable = true;   
//Create a server event handler and set it to the first event handler subroutine.   
ServerEventHandler serverCreateEventHandler;   
serverCreateEventHandler = new ServerEventHandler(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.   
DatabaseEventSet databaseDropEventSet = new DatabaseEventSet();   
databaseDropEventSet.DropTable = true;   
//Create a server event handler and set it to the second event handler subroutine.   
ServerEventHandler serverDropEventHandler;   
serverDropEventHandler = new ServerEventHandler(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.   
Table tb;   
tb = new Table(db, "Test_Table");   
Column mycol1;   
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.   
int x;   
int y;   
for (x = 1; x <= 1000000000; x++) {   
    y = x * 2;   
}   
//Stop event handling.   
db.Events.StopEvents();   
}