SqlException Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 : SystemException
public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
inherit SystemException
[<System.Serializable>]
type SqlException = class
inherit DbException
Public NotInheritable Class SqlException
Inherits SystemException
Public NotInheritable Class SqlException
Inherits DbException
- Héritage
- Héritage
- Attributs
Exemples
L’exemple suivant génère une SqlException exception, 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 .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 standard du Common Language Runtime.) SqlException contient toujours au moins une instance de SqlError.
Les messages qui ont un niveau de gravité de 10 ou moins sont des informations et indiquent des problèmes causés par des erreurs dans les informations entrées par un utilisateur. 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é de 17 à 25 indiquent des erreurs logicielles ou matérielles. Lorsqu’une erreur de niveau 17, 18 ou 19 se produit, vous pouvez continuer à fonctionner, bien que vous ne puissiez peut-être pas exécuter une instruction particulière.
Le SqlConnection reste ouvert lorsque le niveau de gravité est de 19 ou moins. Lorsque le niveau de gravité est égal à 20 ou supérieur, le serveur ferme généralement le SqlConnection. Toutefois, l’utilisateur peut rouvrir la connexion et continuer. Dans les deux cas, un SqlException est généré par la méthode exécutant 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 Événements et erreurs. La classe SqlException est mappée à 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 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 des données cohérentes, quelles que soient les exceptions déclenchées par un fournisseur. Les transactions peuvent échouer, afin d’intercepter les échecs et de réessayer la transaction.
Notez qu’à partir de .NET Framework 4.5, SqlException peut retourner un Win32Exception interne.
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 System.Data.SqlClient a SqlException. Pour obtenir le meilleur niveau de détail des erreurs, interceptez ces exceptions et utilisez les membres de ces classes d’exception pour obtenir des détails sur l’erreur.
Outre les erreurs spécifiques au fournisseur, .NET types de fournisseurs de données 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 une .NET type de fournisseur de données Framework pour déclencher une exception telle que System.ArgumentException ou System.IndexOutOfRangeException. L’appel d’une méthode à un moment incorrect peut déclencher System.InvalidOperationException.
Par conséquent, en général, écrivez un gestionnaire d’exceptions qui intercepte les exceptions spécifiques à un fournisseur, ainsi que les exceptions du Common Language Runtime. Ces éléments 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 lorsque vous utilisez des appels de méthode asynchrone, vous devez inscrire l’événement UnhandledException pour gérer ces exceptions et éviter le blocage de l’application.
Propriétés
| Nom | Description |
|---|---|
| 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 Suivi des données dans ADO.NET. |
| Data |
Obtient une collection de paires clé/valeur qui fournissent des informations supplémentaires définies par l’utilisateur sur l’exception. (Hérité de Exception) |
| ErrorCode |
Obtient l’erreur |
| Errors |
Obtient une collection d’un ou plusieurs objets SqlError qui fournissent des informations détaillées sur les exceptions générées par .NET Framework Fournisseur de données 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 affectée à une exception spécifique. (Hérité de Exception) |
| InnerException |
Obtient l’instance Exception qui a provoqué l’exception actuelle. (Hérité de Exception) |
| LineNumber |
Obtient le numéro de ligne dans le lot de commandes Transact-SQL ou la procédure stockée qui a généré l’erreur. |
| Message |
Obtient le texte décrivant l’erreur. |
| Message |
Obtient un message qui décrit l’exception actuelle. (Hérité de Exception) |
| Number |
Obtient un nombre 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) qui a généré l’erreur. |
| Server |
Obtient le nom de l’ordinateur qui exécute 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. |
| StackTrace |
Obtient une représentation sous forme de chaîne des images immédiates sur la pile des appels. (Hérité de Exception) |
| State |
Obtient un code d’erreur numérique de SQL Server qui représente une erreur, un avertissement ou un message « aucune donnée trouvée ». Pour plus d’informations sur la façon de décoder ces valeurs, consultez Événements et erreurs du moteur de base de données. |
| TargetSite |
Obtient la méthode qui lève l’exception actuelle. (Hérité de Exception) |
Méthodes
| Nom | Description |
|---|---|
| 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 la cause racine d’une ou plusieurs exceptions ultérieures. (Hérité de Exception) |
| GetHashCode() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Définit le SerializationInfo avec des informations sur l’exception. |
| GetType() |
Obtient le type d’exécution de l’instance actuelle. (Hérité de Exception) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| ToString() |
Retourne une chaîne qui représente l’objet actuel SqlException et inclut l’ID de connexion client (pour plus d’informations, voir ClientConnectionId). |
| ToString() |
Crée et retourne une représentation sous forme de chaîne de l’exception actuelle. (Hérité de Exception) |
| ToString() |
Retourne une chaîne qui contient le HRESULT de l’erreur. (Hérité de ExternalException) |
Événements
| Nom | Description |
|---|---|
| SerializeObjectState |
Se produit lorsqu’une exception est sérialisée pour créer un objet d’état d’exception qui contient des données sérialisées sur l’exception. (Hérité de Exception) |