Bağlantı Olayları
Tüm .NET Framework veri sağlayıcıları, bir veri kaynağından bilgi iletileri almak veya Bağlan durumunun değişip değişmediğini belirlemek için kullanabileceğiniz iki olay içeren Bağlan ion nesnelerine sahiptir. Aşağıdaki tabloda Bağlan ion nesnesinin olayları açıklanmaktadır.
Olay | Açıklama |
---|---|
Infomessage | Veri kaynağından bilgilendiren bir ileti döndürülürse gerçekleşir. Bilgilendirme iletileri, bir veri kaynağından gelen ve bir özel durumun oluştuğuna neden olmayan iletilerdir. |
Statechange | Bağlan ion'un durumu değiştiğinde gerçekleşir. |
InfoMessage Olayıyla Çalışma
Nesnenin SqlConnection olayını kullanarak InfoMessage bir SQL Server veri kaynağından uyarılar ve bilgilendirme iletileri alabilirsiniz. Önem düzeyi 11 ile 16 arasında olan veri kaynağından döndürülen hatalar özel durum oluşturmasına neden olur. Ancak olay, InfoMessage veri kaynağından bir hatayla ilişkilendirilmemiş iletileri almak için kullanılabilir. Microsoft SQL Server söz konusu olduğunda, önem derecesi 10 veya daha az olan tüm hatalar bilgilendirme amaçlı bir ileti olarak kabul edilir ve olay kullanılarak InfoMessage yakalanabilir. Daha fazla bilgi için Veritabanı Altyapısı Hata Önem Dereceleri makalesine bakın.
OlayInfoMessage, Errors özelliğinde veri kaynağından gelen iletilerin bir koleksiyonunu içeren bir nesne alırSqlInfoMessageEventArgs. Hata numarası ve ileti metninin yanı sıra hatanın kaynağı için bu koleksiyondaki Error nesnelerini sorgulayabilirsiniz. SQL Server için .NET Framework Veri Sağlayıcısı ayrıca iletinin geldiği veritabanı, saklı yordam ve satır numarası hakkında ayrıntılı bilgi içerir.
Örnek
Aşağıdaki kod örneği, olay için bir olay işleyicisinin InfoMessage nasıl ekleneceğini gösterir.
' 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);
}
}
InfoMessages Olarak Hataları İşleme
Olay InfoMessage normalde yalnızca sunucudan gönderilen bilgilendirme ve uyarı iletileri için tetiklenir. Ancak, gerçek bir hata oluştuğunda, sunucu işlemini başlatan ExecuteNonQuery veya ExecuteReader yönteminin yürütülmesi durdurulup bir özel durum oluşturulur.
Sunucu tarafından oluşturulan hatalardan bağımsız olarak bir komuttaki diğer deyimleri işlemeye devam etmek istiyorsanız, özelliğini SqlConnection olarak true
ayarlayınFireInfoMessageEventOnUserErrors. Bunun yapılması, bağlantının bir özel durum oluşturup işlemeyi InfoMessage kesintiye uğratmak yerine hatalara karşı olayı tetiklesine neden olur. İstemci uygulaması daha sonra bu olayı işleyebilir ve hata koşullarına yanıt verebilir.
Not
Sunucunun komutu işlemeyi durdurmasına neden olan önem düzeyi 17 veya üzeri olan bir hata özel durum olarak işlenmelidir. Bu durumda, hatanın olayda InfoMessage nasıl işlendiğinden bağımsız olarak bir özel durum oluşturulur.
StateChange Olayıyla Çalışma
StateChange olayı, bir Bağlan ion'un durumu değiştiğinde gerçekleşir. StateChange olayı, OriginalState ve CurrentState özelliklerini kullanarak Bağlan ion'un durumundaki değişikliği belirlemenizi sağlayan bir olay alırStateChangeEventArgs. OriginalState özelliği, Bağlan ion'un değişmeden önceki durumunu gösteren bir ConnectionState numaralandırmadır. CurrentState, Bağlan ion değiştirildikten sonra durumunu gösteren bir ConnectionState numaralandırmadır.
Aşağıdaki kod örneği, Bağlan ion'un durumu değiştiğinde konsola ileti yazmak için StateChange olayını kullanır.
' 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);
}