Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wszyscy dostawcy danych programu .NET Framework mają Connection obiekty z dwoma zdarzeniami, których można użyć do pobrania komunikatów informacyjnych ze źródła danych lub określenia, czy stan elementu Connection uległ zmianie. W poniższej tabeli opisano zdarzenia Connection obiektu.
| Zdarzenie | Opis |
|---|---|
| InfoMessage | Występuje, gdy komunikat informacyjny jest zwracany ze źródła danych. Komunikaty informacyjne to komunikaty ze źródła danych, które nie powodują zgłoszenia wyjątku. |
| StateChange | Występuje, gdy stan Connection zmienia się. |
Praca ze zdarzeniem InfoMessage
Ostrzeżenia i komunikaty informacyjne ze źródła danych programu SQL Server można pobrać przy użyciu InfoMessage zdarzenia SqlConnection obiektu. Błędy zwracane ze źródła danych o poziomie ważności od 11 do 16 powodują zgłoszenie wyjątku. Zdarzenie InfoMessage może jednak służyć do uzyskiwania komunikatów ze źródła danych, które nie są skojarzone z błędem. W przypadku programu Microsoft SQL Server każdy błąd o ważności 10 lub mniejszej jest uznawany za komunikat informacyjny i może zostać przechwycony przy użyciu InfoMessage zdarzenia. Aby uzyskać więcej informacji, zobacz artykuł Stopnie błędów silnika bazy danych.
Zdarzenie InfoMessage odbiera obiekt SqlInfoMessageEventArgs, który w swojej właściwości Errors zawiera kolekcję komunikatów ze źródła danych. Możesz wykonywać zapytania dotyczące Error obiektów w tej kolekcji pod kątem numeru błędu i tekstu komunikatu, a także źródła błędu. Dostawca danych programu .NET Framework dla programu SQL Server zawiera również szczegółowe informacje o bazie danych, procedurze składowanej i numerze wiersza, z którego pochodzi komunikat.
Przykład
W poniższym przykładzie kodu pokazano, jak dodać program obsługi zdarzeń dla InfoMessage zdarzenia.
' 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);
}
}
Obsługa błędów jako wiadomości informacyjne
Zdarzenie InfoMessage zwykle jest uruchamiane tylko w przypadku komunikatów informacyjnych i ostrzegawczych wysyłanych z serwera. Jednak w przypadku wystąpienia rzeczywistego błędu wykonanie metody ExecuteNonQuery lub ExecuteReader, która zainicjowała operację serwera, zostaje zatrzymane i zgłoszony zostaje wyjątek.
Jeśli chcesz kontynuować przetwarzanie pozostałych instrukcji w poleceniu niezależnie od błędów generowanych przez serwer, ustaw właściwość FireInfoMessageEventOnUserErrors elementu SqlConnection na wartość true. Spowoduje to, że połączenie uruchamia InfoMessage zdarzenie w przypadku błędów zamiast zgłaszać wyjątek i przerywać przetwarzanie. Aplikacja kliencka może następnie obsługiwać to zdarzenie i reagować na warunki błędu.
Uwaga / Notatka
Błąd z poziomem ważności 17 lub wyższym, który powoduje zatrzymanie przetwarzania polecenia przez serwer, musi być obsługiwany jako wyjątek. W takim przypadku zgłaszany jest wyjątek niezależnie od tego, jak błąd jest obsługiwany w zdarzeniu InfoMessage.
Obsługa zdarzenia StateChange
Zdarzenie StateChange występuje, gdy stan Connection zmienia się. Zdarzenie StateChange odbiera StateChangeEventArgs, które umożliwiają określenie zmiany stanu obiektu Connection przez użycie właściwości OriginalState i CurrentState. Właściwość OriginalState jest wyliczeniem oznaczającym stan Connection przed jego zmianą.
CurrentState
ConnectionState to wyliczenie określające stan Connection po jego zmianie.
Poniższy przykład kodu używa zdarzenia StateChange do zapisania komunikatu w konsoli, gdy stan Connection zmienia się.
' 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);
}