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 .NET Framework Fournisseur de données 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 de 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 des messages d’information et indiquent des problèmes provoqués par des erreurs dans les informations entrées par un utilisateur. Les niveaux de gravité compris entre 11 et 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. Quand une erreur de niveau 17, 18 ou 19 se produit, vous pouvez continuer à travailler, bien que vous ne puissiez 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 normalement 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 moteur de base de données des événements et des erreurs. La SqlException classe est mappée à SQL Server gravité.

Vous trouverez ci-dessous 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 autoriser l’affichage d’un message d’erreur pertinent à l’utilisateur. Vous pouvez utiliser des transactions de base de données pour vous assurer que les données sont cohérentes, indépendamment de 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 déclenchées par un fournisseur. Les transactions peuvent échouer, donc intercepter les échecs et réessayer la transaction.

Notez que à partir de .NET Framework 4,5, SqlException peut retourner une interne Win32Exception .

La classe d’exception d’un .NET Framework fournisseur de données 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 les détails de l’erreur.

En plus des erreurs spécifiques au fournisseur, .NET Framework types de fournisseur de données 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 provoquer un .NET Framework type de fournisseur de données à lever une exception telle que System. ArgumentException ou System. IndexOutOfRangeException. 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 toutes les exceptions spécifiques du fournisseur ainsi que les exceptions de la common language runtime. Ils peuvent être superposés 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 lors de l’utilisation d’appels de méthode asynchrones, vous devez inscrire l' UnhandledException événement pour gérer ces exceptions et éviter les pannes de l’application.

Propriétés

BatchCommand (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 (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)

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