Peristiwa Koneksi
Semua penyedia data .NET Framework memiliki objek Connection dengan dua peristiwa yang dapat Anda gunakan untuk mengambil pesan informatif dari sumber data atau untuk menentukan apakah status Connection telah berubah. Tabel berikut menjelaskan peristiwa objek Connection.
Kejadian | Deskripsi |
---|---|
InfoMessage | Terjadi ketika pesan informatif dikembalikan dari sumber data. Pesan informatif adalah pesan dari sumber data yang tidak menyebabkan pengecualian ditampilkan. |
StateChange | Terjadi bila status Connection berubah. |
Bekerja dengan Peristiwa InfoMessage
Anda dapat mengambil peringatan dan pesan informatif dari sumber data SQL Server menggunakan peristiwa InfoMessage dari objek SqlConnection. Kesalahan yang dikembalikan dari sumber data dengan tingkat keparahan 11 hingga 16 menyebabkan pengecualian ditampilkan. Namun, peristiwa InfoMessage dapat digunakan untuk mendapatkan pesan dari sumber data yang tidak terkait dengan kesalahan. Dalam kasus Microsoft SQL Server, kesalahan apa pun dengan tingkat keparahan 10 atau kurang dianggap sebagai pesan informatif, dan dapat diambil menggunakan peristiwa InfoMessage. Untuk informasi selengkapnya, lihat artikel Keparahan Kesalahan Mesin Database.
Peristiwa InfoMessage menerima objek SqlInfoMessageEventArgs yang berisi, dalam properti Kesalahan-nya, kumpulan pesan dari sumber data. Anda dapat membuat kueri objek Kesalahan dalam kumpulan ini untuk nomor kesalahan dan teks pesan, serta sumber kesalahan. Penyedia Data .NET Framework untuk SQL Server juga menyertakan detail tentang database, prosedur tersimpan, dan nomor baris asal pesan.
Contoh
Contoh kode berikut menunjukkan cara menambahkan penanganan aktivitas untuk peristiwa InfoMessage.
' Assumes that connection represents a SqlConnection object.
AddHandler connection.InfoMessage, _
New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)
Private Shared Sub OnInfoMessage(sender As Object, _
args As SqlInfoMessageEventArgs)
Dim err As SqlError
For Each err In args.Errors
Console.WriteLine("The {0} has received a severity {1}, _
state {2} error number {3}\n" & _
"on line {4} of procedure {5} on server {6}:\n{7}", _
err.Source, err.Class, err.State, err.Number, err.LineNumber, _
err.Procedure, err.Server, err.Message)
Next
End Sub
// Assumes that connection represents a SqlConnection object.
connection.InfoMessage +=
new SqlInfoMessageEventHandler(OnInfoMessage);
protected static void OnInfoMessage(
object sender, SqlInfoMessageEventArgs args)
{
foreach (SqlError err in args.Errors)
{
Console.WriteLine(
"The {0} has received a severity {1}, state {2} error number {3}\n" +
"on line {4} of procedure {5} on server {6}:\n{7}",
err.Source, err.Class, err.State, err.Number, err.LineNumber,
err.Procedure, err.Server, err.Message);
}
}
Menangani Kesalahan sebagai InfoMessages
Peristiwa InfoMessage biasanya akan diaktifkan hanya untuk pesan informatif dan peringatan yang dikirim dari server. Namun, ketika terjadi kesalahan yang sebenarnya, eksekusi metode ExecuteNonQuery atau ExecuteReader yang memulai operasi server dihentikan dan pengecualian ditampilkan.
Jika Anda ingin melanjutkan pemrosesan pernyataan lainnya dalam perintah, terlepas dari kesalahan apa pun yang dihasilkan oleh server, atur properti FireInfoMessageEventOnUserErrors dari SqlConnection ke true
. Melakukan tindakan ini akan menyebabkan koneksi memicu peristiwa InfoMessage untuk kesalahan, alih-alih menampilkan pengecualian dan mengganggu pemrosesan. Aplikasi klien kemudian dapat menangani peristiwa ini dan merespons kondisi kesalahan.
Catatan
Kesalahan dengan tingkat keparahan 17 atau yang lebih tinggi, yang menyebabkan server berhenti memproses perintah harus ditangani sebagai pengecualian. Dalam kasus ini, pengecualian ditampilkan terlepas dari bagaimana kesalahan ditangani di peristiwa InfoMessage.
Bekerja dengan Peristiwa StateChange
Peristiwa StateChange terjadi bila status Connection berubah. Peristiwa StateChange menerima StateChangeEventArgs yang memungkinkan Anda menentukan perubahan status Connection menggunakan properti OriginalState dan CurrentState. Properti OriginalState adalah enumerasi ConnectionState yang menunjukkan status Connection sebelum diubah. CurrentState adalah enumerasi ConnectionState yang menunjukkan status Connection setelah diubah.
Contoh kode berikut menggunakan peristiwa StateChange untuk menulis pesan ke konsol saat status Connection berubah.
' Assumes connection represents a SqlConnection object.
AddHandler connection.StateChange, _
New StateChangeEventHandler(AddressOf OnStateChange)
Protected Shared Sub OnStateChange( _
sender As Object, args As StateChangeEventArgs)
Console.WriteLine( _
"The current Connection state has changed from {0} to {1}.", _
args.OriginalState, args.CurrentState)
End Sub
// Assumes connection represents a SqlConnection object.
connection.StateChange += new StateChangeEventHandler(OnStateChange);
protected static void OnStateChange(object sender,
StateChangeEventArgs args)
{
Console.WriteLine(
"The current Connection state has changed from {0} to {1}.",
args.OriginalState, args.CurrentState);
}