Události připojení

všichni poskytovatelé dat .NET Framework mají objekty připojení se dvěma událostmi, které můžete použít k načtení informativních zpráv ze zdroje dat nebo k určení, jestli se změnil stav připojení . Následující tabulka popisuje události objektu připojení .

Událost Popis
InfoMessage Nastane, pokud se ze zdroje dat vrátí informační zpráva. Informační zprávy jsou zprávy ze zdroje dat, které nevedou k vyvolání výjimky.
StateChange Vyvolá se v případě, že dojde ke změně stavu připojení .

Práce s událostí InfoMessage

můžete načíst upozornění a informativní zprávy ze zdroje dat SQL Server s využitím InfoMessage události SqlConnection objektu. Chyby vrácené ze zdroje dat se úrovní závažnosti 11 až 16 způsobují výjimku, která má být vyvolána. InfoMessageUdálost však lze použít k získání zpráv ze zdroje dat, které nejsou přidruženy k chybě. v případě Microsoft SQL Server se jako informační zpráva považuje jakákoli chyba se závažností 10 nebo méně, která může být zachycena pomocí InfoMessage události. Další informace najdete v článku o závažnosti chyb databázového stroje .

InfoMessageUdálost obdrží SqlInfoMessageEventArgs objekt obsahující ve vlastnosti Errors kolekci zpráv ze zdroje dat. Můžete zadat dotaz na objekty chyby v této kolekci pro číslo chyby a text zprávy a také zdroj chyby. Zprostředkovatel dat .NET Framework pro SQL Server obsahuje také podrobnosti o databázi, uložené proceduře a čísle řádku, ze kterého zpráva pochází.

Příklad

Následující příklad kódu ukazuje, jak přidat obslužnou rutinu události pro InfoMessage událost.

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

Zpracování chyb jako InfoMessages

InfoMessageUdálost se normálně aktivuje jenom pro informativní a varovné zprávy, které se odesílají ze serveru. Pokud však dojde ke skutečné chybě, spuštění metody ExecuteNonQuery nebo ExecuteReader , která iniciovala operaci serveru, je zastaveno a je vyvolána výjimka.

Pokud chcete pokračovat v zpracovávání zbývajících příkazů v příkazu bez ohledu na chyby vyprodukované serverem, nastavte FireInfoMessageEventOnUserErrors vlastnost na SqlConnection true . To způsobí, že připojení vyvolá InfoMessage událost pro chyby namísto vyvolání výjimky a přerušení zpracování. Klientská aplikace pak může tuto událost zpracovat a reagovat na chybové podmínky.

Poznámka

Chyba s úrovní závažnosti 17 nebo vyšší, která způsobí, že server přestane zpracovávat příkazy, musí být zpracován jako výjimka. V tomto případě je vyvolána výjimka bez ohledu na to, jak je chyba zpracována v InfoMessage události.

Práce s událostí StateChange

K události StateChange dojde, když se změní stav připojení . Událost StateChange přijímá StateChangeEventArgs , která umožňuje určit změnu stavu připojení pomocí vlastností OriginalState a CurrentState . Vlastnost OriginalState je ConnectionState výčet, který označuje stav připojení před jeho změnou. CurrentState je ConnectionState výčet, který označuje stav připojení po jeho změně.

Následující příklad kódu používá událost StateChange k zápisu zprávy do konzoly, když se změní stav připojení .

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

Viz také