Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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);
}