Události připojení

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

Událost Popis
InfoMessage Nastane, když se ze zdroje dat vrátí informační zpráva. Informační zprávy jsou zprávy ze zdroje dat, které nemají za následek vyvolání výjimky.
StateChange Nastane, když se změní stav Připojení ionu.

Práce s událostí InfoMessage

Pomocí události SqlConnection objektu můžete načíst upozornění a informační zprávy ze zdroje InfoMessage dat SQL Serveru. Chyby vrácené ze zdroje dat s úrovní závažnosti 11 až 16 způsobují vyvolání výjimky. InfoMessage Událost se ale dá použít k získání zpráv ze zdroje dat, které nejsou přidružené k chybě. V případě Microsoft SQL Serveru se jakákoli chyba se závažností 10 nebo méně považuje za informační zprávu a lze ji zachytit pomocí InfoMessage události. Další informace najdete v článku Závažnosti chyb databázového stroje.

Událost InfoMessage obdrží SqlInfoMessageEventArgs objekt obsahující ve své vlastnosti Errors kolekci zpráv ze zdroje dat. Můžete dotazovat objekty Error v této kolekci na číslo chyby a text zprávy, stejně jako zdroj chyby. Rozhraní .NET Framework Zprostředkovatel dat 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 InfoMessage události pro 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 informačních zpráv

Událost InfoMessage se obvykle aktivuje pouze pro informační a upozorňující zprávy odeslané ze serveru. Nicméně, když dojde k skutečné chybě, spuštění ExecuteNonQuery nebo ExecuteReader metoda, která iniciovala operaci serveru, je zastavena a je vyvolána výjimka.

Chcete-li pokračovat ve zpracování zbývajících příkazů v příkazu bez ohledu na chyby způsobené serverem, nastavte FireInfoMessageEventOnUserErrors vlastnost SqlConnection na truehodnotu . Tím dojde k tomu, že připojení aktivuje InfoMessage událost kvůli chybám místo vyvolání výjimky a přerušení zpracování. Klientská aplikace pak může tuto událost zpracovat a reagovat na chybové stavy.

Poznámka:

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

Práce s událostí StateChange

Událost StateChange nastane, když se změní stav Připojení ionu. Událost StateChange přijímáStateChangeEventArgs, která umožňuje určit změnu stavu Připojení ion pomocí OriginalState a CurrentState vlastnosti. OriginalState vlastnost je ConnectionState výčet, který označuje stav Připojení ion před změnou. CurrentState je ConnectionState výčet, který označuje stav Připojení ion po změně.

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

' 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é