Verbinding maken ion-gebeurtenissen
Alle .NET Framework-gegevensproviders hebben Verbinding maken ionobjecten met twee gebeurtenissen die u kunt gebruiken om informatieve berichten op te halen uit een gegevensbron of om te bepalen of de status van een Verbinding maken ion is gewijzigd. In de volgende tabel worden de gebeurtenissen van het Verbinding maken ion-object beschreven.
Gebeurtenis | Beschrijving |
---|---|
InfoMessage | Treedt op wanneer een informatief bericht wordt geretourneerd vanuit een gegevensbron. Informatieve berichten zijn berichten van een gegevensbron die niet resulteren in een uitzondering die wordt gegenereerd. |
StateChange | Treedt op wanneer de status van de Verbinding maken ion verandert. |
Werken met de InfoMessage-gebeurtenis
U kunt waarschuwingen en informatieve berichten ophalen uit een SQL Server-gegevensbron met behulp van de InfoMessage gebeurtenis van het SqlConnection object. Fouten die worden geretourneerd uit de gegevensbron met een ernstniveau van 11 tot en met 16, zorgen ervoor dat er een uitzondering wordt gegenereerd. De InfoMessage gebeurtenis kan echter worden gebruikt om berichten op te halen uit de gegevensbron die niet aan een fout zijn gekoppeld. In het geval van Microsoft SQL Server wordt elke fout met een ernst van 10 of minder beschouwd als een informatief bericht en kan worden vastgelegd met behulp van de InfoMessage gebeurtenis. Zie het artikel Ernst van database-enginefouten voor meer informatie.
De InfoMessage gebeurtenis ontvangt een SqlInfoMessageEventArgs object dat, in de eigenschap Fouten , een verzameling berichten van de gegevensbron bevat. U kunt een query uitvoeren op de foutobjecten in deze verzameling voor het foutnummer en de berichttekst, evenals de bron van de fout. De .NET Framework-gegevensprovider voor SQL Server bevat ook details over de database, opgeslagen procedure en regelnummer waaruit het bericht afkomstig is.
Opmerking
In het volgende codevoorbeeld ziet u hoe u een gebeurtenis-handler voor de InfoMessage gebeurtenis toevoegt.
' 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);
}
}
Fouten verwerken als InfoMessages
De InfoMessage gebeurtenis wordt normaal gesproken alleen geactiveerd voor informatieve en waarschuwingsberichten die vanaf de server worden verzonden. Wanneer er echter een werkelijke fout optreedt, wordt de uitvoering van de methode ExecuteNonQuery of ExecuteReader die de serverbewerking heeft gestart gestopt en wordt er een uitzondering gegenereerd.
Als u de rest van de instructies in een opdracht wilt blijven verwerken, ongeacht eventuele fouten die door de server worden geproduceerd, stelt u de FireInfoMessageEventOnUserErrors eigenschap van de SqlConnection opdracht in op true
. Als u dit doet, wordt de InfoMessage gebeurtenis geactiveerd voor fouten in plaats van een uitzondering te genereren en de verwerking te onderbreken. De clienttoepassing kan deze gebeurtenis vervolgens afhandelen en reageren op foutvoorwaarden.
Notitie
Een fout met een ernstniveau van 17 of hoger waardoor de server stopt met het verwerken van de opdracht, moet worden verwerkt als een uitzondering. In dit geval wordt er een uitzondering gegenereerd, ongeacht hoe de fout wordt verwerkt in de InfoMessage gebeurtenis.
Werken met de StateChange-gebeurtenis
De stateChange-gebeurtenis treedt op wanneer de status van een Verbinding maken ion verandert. De stateChange-gebeurtenis ontvangt StateChangeEventArgs die u in staat stelt om de wijziging in de status van de Verbinding maken ion te bepalen met behulp van de eigenschappen OriginalState en CurrentState. De eigenschap OriginalState is een ConnectionState opsomming die de status van de Verbinding maken ion aangeeft voordat deze is gewijzigd. CurrentState is een ConnectionState opsomming die de status van de Verbinding maken ion aangeeft nadat deze is gewijzigd.
In het volgende codevoorbeeld wordt de gebeurtenis StateChange gebruikt om een bericht naar de console te schrijven wanneer de status van de Verbinding maken ion verandert.
' 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);
}