Udostępnij za pośrednictwem


Zdarzenia połączenia

Wszyscy dostawcy danych programu .NET Framework mają obiekty Połączenie ion 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łączenie ion uległ zmianie. W poniższej tabeli opisano zdarzenia obiektu Połączenie ion.

Wydarzenie 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 zmienia się stan Połączenie ion.

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ł Ważność błędu aparatu bazy danych.

Zdarzenie InfoMessage odbiera SqlInfoMessageEventArgs obiekt zawierający we właściwości Errors kolekcję komunikatów ze źródła danych. W tej kolekcji można wykonywać zapytania dotyczące obiektów Error dla numeru błędu i tekstu komunikatu, a także źródła błędu. Program .NET Framework Dostawca danych 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 infoMessages

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, 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 FireInfoMessageEventOnUserErrors właściwość na SqlConnection truewartość . 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

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 sposobu obsługi błędu InfoMessage w zdarzeniu.

Praca ze zdarzeniem StateChange

Zdarzenie StateChange występuje, gdy zmienia się stan Połączenie ion. Zdarzenie StateChange odbieraStateChangeEventArgs, które umożliwia określenie zmiany stanu Połączenie ion przy użyciu właściwości OriginalState i CurrentState. Właściwość OriginalState to ConnectionState wyliczenie wskazujące stan Połączenie ion przed jego zmianą. CurrentState to ConnectionState wyliczenie wskazujące stan Połączenie ion po zmianie.

Poniższy przykład kodu używa zdarzenia StateChange do zapisania komunikatu w konsoli po zmianie stanu Połączenie ion.

' 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);  
}  

Zobacz też