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
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
    inherit DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Héritage
SqlException
Attributs

Exemples

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

using Microsoft.Data.SqlClient;
using System.Text;

class Program
{
    static void Main()
    {
        string s = GetConnectionString();
        ShowSqlException(s);
        Console.ReadLine();
    }
    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());
            }
        }
    }

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code, 
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Initial Catalog=AdventureWorks;"
            + "Integrated Security=SSPI";
    }
}

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 de Common Language Runtime standard.) SqlException contient toujours au moins un instance de SqlError.

Les messages dont le niveau de gravité est inférieur ou égal à 10 sont des informations 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. Quand 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 normalement 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 correspond à SQL Server gravité.

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’affichage d’un message d’erreur approprié pour l’utilisateur. 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 Microsoft.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 élément interne Win32Exception.

La classe d’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 Microsoft.Data.SqlClient a SqlException. Pour obtenir le meilleur niveau de détail de l’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 n’est peut-être pas possible.

Une entrée incorrecte peut entraîner le déclenchement d’une exception comme 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 au fournisseur ainsi que les exceptions du Common Language Runtime. Vous pouvez les superposer 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’événement UnhandledException pour gérer ces exceptions et éviter le blocage de l’application.

Propriétés

BatchCommand

Obtient le instance BatchCommand qui a généré l’erreur ou null si l’exception n’a pas été levée à partir d’un lot.

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.

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.

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.

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.

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.

Méthodes

GetObjectData(SerializationInfo, StreamingContext)
Obsolète.

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

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).

S’applique à

Voir aussi