Peristiwa koneksi
Berlaku untuk: .NET Framework .NET .NET Standard
Penyedia Data Microsoft SqlClient untuk SQL Server memiliki objek Koneksi dengan dua peristiwa yang dapat Anda gunakan untuk mengambil pesan informasi dari sumber data atau untuk menentukan apakah status Koneksi telah berubah. Tabel berikut menjelaskan peristiwa objek Connection.
Kejadian | Deskripsi |
---|---|
InfoMessage | Terjadi ketika pesan informatif dikembalikan dari sumber data. Pesan informasi adalah pesan dari sumber data yang tidak mengakibatkan pengecualian dilemparkan. |
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, InfoMessage peristiwa dapat digunakan untuk mendapatkan pesan dari sumber data yang tidak terkait dengan kesalahan. Dengan Microsoft SQL Server, kesalahan apa pun dengan tingkat keparahan 10 atau kurang dianggap sebagai pesan informasi, dan dapat ditangkap dengan menggunakan peristiwa tersebut 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 mengkueri objek Kesalahan dalam koleksi ini untuk nomor kesalahan, teks pesan, dan sumber kesalahan. Penyedia Data Microsoft SqlClient untuk SQL Server juga menyertakan detail tentang database, prosedur tersimpan, dan nomor baris tempat pesan berasal.
Contoh
Contoh kode berikut menunjukkan cara menambahkan penanganan aktivitas untuk peristiwa InfoMessage.
// Assumes that connection represents a SqlConnection object.
connection.InfoMessage +=
(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 kesalahan aktual terjadi, eksekusi metode ExecuteNonQuery atau ExecuteReader yang memulai operasi server dihentikan dan pengecualian dilemparkan.
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
. Mengatur properti ini menyebabkan koneksi mengaktifkan InfoMessage peristiwa untuk kesalahan alih-alih melempar 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 that connection represents a SqlConnection object.
connection.StateChange +=
(object sender, StateChangeEventArgs args) =>
{
Console.WriteLine(
"The current Connection state has changed from {0} to {1}.",
args.OriginalState, args.CurrentState);
};