Dela via


Anslut ionshändelser

Alla .NET Framework-dataprovidrar har Anslut ionsobjekt med två händelser som du kan använda för att hämta informationsmeddelanden från en datakälla eller för att avgöra om tillståndet för en Anslut ion har ändrats. I följande tabell beskrivs händelserna i Anslut ion-objektet.

Händelse beskrivning
InfoMessage Inträffar när ett informationsmeddelande returneras från en datakälla. Informationsmeddelanden är meddelanden från en datakälla som inte resulterar i att ett undantag utlöses.
StateChange Inträffar när tillståndet för Anslut ion ändras.

Arbeta med InfoMessage-händelsen

Du kan hämta varningar och informationsmeddelanden från en SQL Server-datakälla med hjälp InfoMessage av objektets SqlConnection händelse. Fel som returneras från datakällan med allvarlighetsgraden 11 till 16 orsakar ett undantagsfel. Händelsen kan dock InfoMessage användas för att hämta meddelanden från datakällan som inte är associerade med ett fel. När det gäller Microsoft SQL Server anses alla fel med allvarlighetsgraden 10 eller mindre vara ett informationsmeddelande och kan fångas in med hjälp InfoMessage av händelsen. Mer information finns i artikeln Om allvarlighetsgrad för databasmotorns fel.

Händelsen InfoMessage tar emot ett SqlInfoMessageEventArgs objekt som i egenskapen Fel innehåller en samling meddelanden från datakällan. Du kan fråga felobjekten i den här samlingen efter felnumret och meddelandetexten samt källan till felet. .NET Framework-dataprovidern för SQL Server innehåller även information om databasen, den lagrade proceduren och radnumret som meddelandet kom från.

Exempel

I följande kodexempel visas hur du lägger till en händelsehanterare för InfoMessage händelsen.

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

Hantera fel som InfoMessages

Händelsen InfoMessage utlöses normalt endast för informations- och varningsmeddelanden som skickas från servern. Men när ett verkligt fel inträffar stoppas körningen av metoden ExecuteNonQuery eller ExecuteReader som initierade serveråtgärden och ett undantag genereras.

Om du vill fortsätta att bearbeta resten av -instruktionerna i ett kommando oavsett eventuella fel som genereras av servern anger du FireInfoMessageEventOnUserErrors egenskapen SqlConnection för till true. Detta gör att anslutningen utlöser InfoMessage händelsen för fel i stället för att utlösa ett undantag och avbryta bearbetningen. Klientprogrammet kan sedan hantera den här händelsen och svara på feltillstånd.

Kommentar

Ett fel med allvarlighetsgrad 17 eller högre som gör att servern slutar bearbeta kommandot måste hanteras som ett undantag. I det här fallet utlöses ett undantag oavsett hur felet hanteras i händelsen InfoMessage .

Arbeta med StateChange-händelsen

StateChange-händelsen inträffar när tillståndet för en Anslut ion ändras. StateChange-händelsen tar emot StateChangeEventArgs som gör att du kan fastställa ändringen i tillståndet för Anslut ion med hjälp av egenskaperna OriginalState och CurrentState. Egenskapen OriginalState är en ConnectionState uppräkning som anger tillståndet för Anslut ionen innan den ändrades. CurrentState är en ConnectionState uppräkning som anger tillståndet för Anslut ionen efter att den ändrats.

I följande kodexempel används händelsen StateChange för att skriva ett meddelande till konsolen när tillståndet för Anslut ion ändras.

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

Se även