Sdílet prostřednictvím


Události připojení

Všichni zprostředkovatelé dat rozhraní .NET Framework mají Connection 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 Connection . Následující tabulka popisuje události objektu Connection .

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.
ZměnaStavu Nastane, když se změní stav Connection .

Práce s událostí InfoMessage

Pomocí události InfoMessage objektu můžete načíst upozornění a informační zprávy ze zdroje SqlConnection 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é Errors vlastnosti kolekci zpráv ze zdroje dat. Na objekty v této kolekci můžete zadat dotaz Error na číslo chyby a text zprávy a také na zdroj chyby. Zprostředkovatel dat rozhraní .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 pro událost InfoMessage.

' 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. Pokud však dojde k skutečné chybě, spuštění ExecuteNonQuery nebo ExecuteReader metody, která iniciovala operaci serveru, se zastaví a vyvolá se výjimka.

Chcete-li pokračovat ve zpracování zbývajících příkazů 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 Connection . Událost StateChange přijímá StateChangeEventArgs , která umožňuje určit změnu stavu objektu Connection pomocí OriginalState vlastností a CurrentState vlastností. Vlastnost OriginalState je ConnectionState výčet, který označuje stav Connection před změnou. CurrentState ConnectionState je výčet, který označuje stav Connection po změně.

Následující příklad kódu používá StateChange událost k napsání zprávy do konzoly při změně stavu Connection .

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