Bagikan melalui


Menangani Peristiwa SMO

Ada jenis peristiwa server yang dapat dilanggani dengan menggunakan penanganan aktivitas dan ServerConnection objek .

Banyak kelas instans di SQL Server Management Objects (SMO) dapat memicu peristiwa ketika tindakan tertentu di server terjadi.

Peristiwa ini dapat ditangani secara terprogram dengan menyiapkan penanganan aktivitas dan berlangganan peristiwa terkait. Jenis penanganan peristiwa ini bersifat sementara karena semua langganan dihapus saat program klien SMO keluar.

Penanganan Peristiwa ConnectionContext

Objek ServerConnection mendukung beberapa jenis peristiwa. Properti peristiwa harus diatur ke instans penanganan aktivitas yang sesuai, dan objek penanganan aktivitas harus didefinisikan sebagai fungsi terlindungi yang menangani peristiwa.

Langganan Peristiwa

Anda menangani peristiwa dengan menulis kelas penanganan aktivitas, membuat instansnya, menetapkan penanganan aktivitas ke objek induk, lalu berlangganan peristiwa.

Kelas penanganan aktivitas harus ditulis untuk menangani peristiwa. Kelas penanganan aktivitas dapat berisi lebih dari satu fungsi penanganan aktivitas, dan harus diinstal agar peristiwa dapat ditangani. Fungsi penanganan aktivitas menerima informasi tentang peristiwa dari parameter ServerEventNotificatificationArgs yang dapat digunakan untuk melaporkan informasi tentang peristiwa tersebut.

Jenis peristiwa database dan server yang dapat ditangani tercantum di DatabaseEventSet kelas dan ServerEventSetkelas .

Contoh

Untuk menggunakan contoh kode apa pun yang disediakan, Anda harus memilih lingkungan pemrograman, templat pemrograman, dan bahasa pemrograman untuk membuat aplikasi Anda. Untuk informasi selengkapnya, lihat "Cara: Membuat Proyek SMO Visual Basic di Visual Studio .NET" atau "Cara: Membuat Proyek Visual C# SMO di Visual Studio .NET" di SQL Server Books Online.

Mendaftarkan Penanganan Aktivitas dan Berlangganan Penanganan Peristiwa di Visual Basic

Contoh kode ini memperlihatkan cara menyiapkan penanganan aktivitas, dan cara berlangganan peristiwa database.

Mendaftarkan Penanganan Peristiwa dan Berlangganan Penanganan Peristiwa di Visual C#

Contoh kode ini memperlihatkan cara menyiapkan penanganan aktivitas, dan cara berlangganan peristiwa database.

//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();   
}