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.
Dotyczy: .NET Framework
.NET
Standard
Dostawca danych Programu Microsoft SqlClient dla programu SQL Server ma obiekty połączenia z dwoma zdarzeniami, których można użyć do pobierania komunikatów informacyjnych ze źródła danych lub określenia, czy stan połączenia uległ zmianie. W poniższej tabeli opisano zdarzenia obiektu Connection .
| Event | Description |
|---|---|
| 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 połączenia ulegnie zmianie. |
Praca z wydarzeniem 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 otrzymuje obiekt SqlInfoMessageEventArgs, który w swojej właściwości Errors zawiera kolekcję komunikatów ze źródła danych. W tej kolekcji można wykonywać zapytania dotyczące obiektów Error dla numeru błędu, tekstu komunikatu i źródła błędu. Dostawca danych Microsoft SqlClient dla programu SQL Server zawiera również szczegółowe informacje o bazie danych, procedurze składowanej i numerze wiersza, z którego pochodzi komunikat.
Example
W poniższym przykładzie kodu pokazano, jak dodać program obsługi zdarzeń dla InfoMessage zdarzenia.
// 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);
}
};
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 rozpoczęła operację serwera, zostanie zatrzymana i zostanie zgłoszony 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. Ustawienie tej właściwości powoduje, ż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.
Praca nad zdarzeniem StateChange
Zdarzenie StateChange występuje, gdy stan połączenia ulegnie zmianie. Zdarzenie StateChange odbiera StateChangeEventArgs , które umożliwia określenie zmiany stanu połączenia przy użyciu właściwości OriginalState i CurrentState . Właściwość OriginalState to ConnectionState wyliczenie wskazujące stan połączenia przed jego zmianą. CurrentState to ConnectionState wyliczenie wskazujące stan połączenia po jego zmianie.
Poniższy przykład kodu używa zdarzenia StateChange do zapisania komunikatu w konsoli po zmianie stanu połączenia .
// 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);
};