SqlException Classe

Définition

Exception levée lorsque SQL Server retourne un avertissement ou une erreur. Cette classe ne peut pas être héritée.

public ref class SqlException sealed : System::Data::Common::DbException
public ref class SqlException sealed : SystemException
public sealed class SqlException : System.Data.Common.DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
[<System.Serializable>]
type SqlException = class
    inherit SystemException
[<System.Serializable>]
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
Héritage
Héritage
Héritage
Attributs

Exemples

L’exemple suivant génère un SqlException , puis affiche l’exception .

public static void ShowSqlException(string connectionString)
{
    string queryString = "EXECUTE NonExistantStoredProcedure";
    StringBuilder errorMessages = new StringBuilder();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
    }
}
Public Sub ShowSqlException(ByVal connectionString As String)
    Dim queryString As String = "EXECUTE NonExistantStoredProcedure"
    Dim errorMessages As New StringBuilder()

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)

        Try
            command.Connection.Open()
            command.ExecuteNonQuery()

        Catch ex As SqlException
            Dim i As Integer
            For i = 0 To ex.Errors.Count - 1
                errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
                    & "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
                    & "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
                    & "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
                    & "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
            Next i
            Console.WriteLine(errorMessages.ToString())
        End Try
    End Using
End Sub

Remarques

Cette classe est créée chaque fois que le fournisseur de données .NET Framework pour SQL Server rencontre une erreur générée à partir du serveur. (Les erreurs côté client sont levées en tant qu’exceptions du Common Language Runtime standard.) SqlException contient toujours au moins une instance de SqlError.

Les messages dont le niveau de gravité est inférieur ou égal à 10 sont informatifs et indiquent des problèmes causés par des erreurs dans les informations qu’un utilisateur a entrées. Les niveaux de gravité de 11 à 16 sont générés par l’utilisateur et peuvent être corrigés par l’utilisateur. Les niveaux de gravité compris entre 17 et 25 indiquent des erreurs logicielles ou matérielles. Lorsqu’une erreur de niveau 17, 18 ou 19 se produit, vous pouvez continuer à travailler, bien que vous ne puissiez peut-être pas exécuter une instruction particulière.

SqlConnection reste ouvert lorsque le niveau de gravité est inférieur ou égal à 19. Lorsque le niveau de gravité est supérieur ou égal à 20, le serveur ferme généralement le SqlConnection. L'utilisateur peut toutefois rouvrir la connexion et continuer. Dans les deux cas, SqlException est généré par la méthode qui exécute la commande.

Pour plus d’informations sur les messages d’avertissement et d’information envoyés par SQL Server, consultez Événements et erreurs du moteur de base de données. La SqlException classe est mappée à la gravité de SQL Server.

Voici des informations générales sur la gestion des exceptions. Votre code doit intercepter les exceptions pour empêcher l’application de se bloquer et pour permettre à l’utilisateur d’afficher un message d’erreur pertinent. Vous pouvez utiliser des transactions de base de données pour vous assurer que les données sont cohérentes, quel que soit ce qui se passe dans l’application cliente (y compris un incident). Les fonctionnalités telles que System.Transaction.TransactionScope ou la méthode BeginTransaction (dans System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection et System.Data.SqlClient.SqlConnection) garantissent la cohérence des données, quelles que soient les exceptions levées par un fournisseur. Les transactions peuvent échouer. Par conséquent, interceptez les échecs et réessayez la transaction.

Notez qu’à partir de .NET Framework 4.5, SqlException peut retourner un interne Win32Exception.

La classe exception d’un fournisseur de données .NET Framework signale des erreurs spécifiques au fournisseur. Par exemple, System.Data.Odbc a OdbcException, System.Data.OleDb a OleDbException et System.Data.SqlClient a SqlException. Pour obtenir le meilleur niveau de détail d’erreur, interceptez ces exceptions et utilisez les membres de ces classes d’exception pour obtenir des détails sur l’erreur.

En plus des erreurs spécifiques au fournisseur, les types de fournisseurs de données .NET Framework peuvent déclencher des exceptions .NET Framework telles que System.OutOfMemoryException et System.Threading.ThreadAbortException. La récupération à partir de ces exceptions peut ne pas être possible.

Une entrée incorrecte peut entraîner le déclenchement d’une exception par exemple System.ArgumentException ou System.IndexOutOfRangeException pour un type de fournisseur de données .NET Framework. L’appel d’une méthode au mauvais moment peut déclencher System.InvalidOperationException.

Ainsi, en général, écrivez un gestionnaire d’exceptions qui intercepte les exceptions spécifiques au fournisseur, ainsi que les exceptions du Common Language Runtime. Celles-ci peuvent être superposées comme suit :

try {  
   // code here  
}  
catch (SqlException odbcEx) {  
   // Handle more specific SqlException exception here.  
}  
catch (Exception ex) {  
   // Handle generic ones here.  
}  

Ou :

try {  
   // code here  
}  
catch (Exception ex) {  
   if (ex is SqlException) {  
      // Handle more specific SqlException exception here.  
   }  
   else {  
      // Handle generic ones here.  
   }  
}  

Il est également possible qu’un appel de méthode de fournisseur de données .NET Framework échoue sur un thread de pool de threads sans code utilisateur sur la pile. Dans ce cas, et lorsque vous utilisez des appels de méthode asynchrones, vous devez inscrire l’événement UnhandledException pour gérer ces exceptions et éviter le blocage de l’application.

Propriétés

BatchCommand

Si cela DbException a été déclenché lors de l’exécution d’un DbBatch, fait référence au spécifique DbBatchCommand qui a déclenché l’exception.

(Hérité de DbException)
Class

Obtient le niveau de gravité de l'erreur retournée par le fournisseur de données .NET Framework pour SQL Server.

ClientConnectionId

Représente l'ID de connexion client Pour plus d’informations, consultez Traçage de données dans ADO.NET.

Data

Obtient une collection de paires clé/valeur qui fournissent des informations définies par l'utilisateur supplémentaires sur l'exception.

(Hérité de Exception)
DbBatchCommand

En cas de substitution dans une classe dérivée, si cela DbException a été déclenché lors de l’exécution d’un DbBatch, référence le spécifique DbBatchCommand qui a déclenché l’exception.

(Hérité de DbException)
ErrorCode

Obtient le HRESULT de l’erreur.

(Hérité de ExternalException)
Errors

Obtient une collection d'un ou plusieurs objets SqlError qui donnent des informations détaillées sur les exceptions générées par le fournisseur de données .NET Framework pour SQL Server.

HelpLink

Obtient ou définit un lien vers le fichier d'aide associé à cette exception.

(Hérité de Exception)
HResult

Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique.

(Hérité de Exception)
InnerException

Obtient l'instance Exception qui a provoqué l'exception actuelle.

(Hérité de Exception)
IsTransient

Indique si l’erreur représentée par cette exception DbException peut être une erreur temporaire, c’est-à-dire si une nouvelle tentative d’exécution de l’opération de déclenchement peut réussir sans autre modification.

(Hérité de DbException)
LineNumber

Obtient le numéro de la ligne qui a généré l'erreur dans le lot d'instructions Transact-SQL ou dans la procédure stockée.

Message

Obtient le texte décrivant l'erreur.

Message

Obtient un message qui décrit l'exception active.

(Hérité de Exception)
Number

Obtient un numéro qui identifie le type d'erreur.

Procedure

Obtient le nom de la procédure stockée ou de l'appel de procédure distante (RPC, Remote Procedure Call) qui a généré l'erreur.

Server

Obtient le nom de l'ordinateur exécutant une instance de SQL Server qui a généré l'erreur.

Source

Obtient le nom du fournisseur qui a généré l'erreur.

SqlState

Pour les fournisseurs de base de données assurant sa prise en charge, contient un code de retour de caractères SQL 5 standard indiquant la réussite ou l’échec de l’opération de base de données. Les 2 premiers caractères représentent la classe du code de retour (par exemple, erreur, réussite), tandis que les 3 derniers caractères représentent la sous-classe, ce qui permet de détecter les scénarios d’erreur dans une base de données portable.

Pour les fournisseurs de bases de données n’assurant pas sa prise en charge, ou pour les scénarios d’erreur inapplicables, contient null.

(Hérité de DbException)
StackTrace

Obtient une représentation sous forme de chaîne des frames immédiats sur la pile des appels.

(Hérité de Exception)
State

Obtient à partir de SQL Server un code d'erreur numérique qui représente un message d'erreur, d'avertissement ou de type « Aucune donnée trouvée ». Pour plus d’informations sur le mode de décodage de ces valeurs, consultez Erreurs et événements du moteur de base de données.

TargetSite

Obtient la méthode qui lève l'exception actuelle.

(Hérité de Exception)

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetBaseException()

En cas de substitution dans une classe dérivée, retourne la Exception qui est à l'origine d'une ou de plusieurs exceptions ultérieures.

(Hérité de Exception)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetObjectData(SerializationInfo, StreamingContext)

Définit SerializationInfo avec des informations concernant l'exception.

GetObjectData(SerializationInfo, StreamingContext)
Obsolète.

En cas de substitution dans une classe dérivée, définit SerializationInfo avec des informations sur l'exception.

(Hérité de Exception)
GetType()

Obtient le type au moment de l'exécution de l'instance actuelle.

(Hérité de Exception)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet SqlException actuel et inclut l'ID de connexion client (pour plus d'informations, consultez ClientConnectionId).

ToString()

Retourne une chaîne qui contient le HRESULT de l'erreur.

(Hérité de ExternalException)
ToString()

Crée et retourne une chaîne représentant l'exception actuelle.

(Hérité de Exception)

Événements

SerializeObjectState
Obsolète.

Se produit quand une exception est sérialisée pour créer un objet d'état d'exception qui contient des données sérialisées concernant l'exception.

(Hérité de Exception)

S’applique à

Voir aussi