Freigeben über


SqlException Klasse

Definition

Die Ausnahme, die ausgelöst wird, wenn SQL Server eine Warnung oder einen Fehler zurückgibt. Diese Klasse kann nicht vererbt werden.

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
Vererbung
SqlException
Attribute

Beispiele

Im folgenden Beispiel wird ein SqlException generiert und dann die Ausnahme angezeigt.

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";
    }
}

Hinweise

Diese Klasse wird immer dann erstellt, wenn der .NET Framework Datenanbieter für SQL Server auf einen vom Server generierten Fehler stößt. (Clientseitige Fehler werden als Standardausnahmen der Common Language Runtime ausgelöst.) SqlException Enthält immer mindestens einen instance von SqlError.

Nachrichten mit einem Schweregrad von 10 oder weniger sind informell und weisen auf Probleme hin, die durch Fehler in den Von einem Benutzer eingegebenen Informationen verursacht wurden. Schweregrade von 11 bis 16 werden vom Benutzer generiert und können vom Benutzer korrigiert werden. Schweregrade von 17 bis 25 zeigen Software- oder Hardwarefehler an. Wenn ein Fehler der Ebene 17, 18 oder 19 auftritt, können Sie weiter arbeiten, obwohl Sie möglicherweise keine bestimmte Anweisung ausführen können.

Die SqlConnection bleibt hergestellt, wenn der Schweregrad 19 oder darunter beträgt. Wenn der Schweregrad 20 oder höher ist, schließt der Server normalerweise den SqlConnection. Die Benutzer können die Verbindung aber erneut öffnen und fortfahren. In beiden Fällen wird von der Methode, die den Befehl ausführt, eine SqlException generiert.

Informationen zu den Warnungen und Informationsmeldungen, die von SQL Server gesendet werden, finden Sie unter Ereignisse und Fehler der Datenbank-Engine. Die SqlException Klasse wird SQL Server Schweregrad zugeordnet.

Im Folgenden sind allgemeine Informationen zur Behandlung von Ausnahmen aufgeführt. Ihr Code sollte Ausnahmen abfangen, um zu verhindern, dass die Anwendung abstürzt und dem Benutzer eine relevante Fehlermeldung angezeigt wird. Sie können Datenbanktransaktionen verwenden, um sicherzustellen, dass die Daten konsistent sind, unabhängig davon, was in der Clientanwendung geschieht (einschließlich eines Absturzes). Features wie System.Transaction.TransactionScope oder die BeginTransaction-Methode (in System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection und Microsoft.Data.SqlClient.SqlConnection) sorgen für konsistente Daten, unabhängig von Ausnahmen, die von einem Anbieter ausgelöst werden. Transaktionen können fehlschlagen. Daher können Sie Fehler abfangen und die Transaktion wiederholen.

Beachten Sie, dass ab .NET Framework 4.5 SqlException eine innere Win32Exceptionzurückgeben kann.

Die Ausnahmeklasse eines .NET Framework Datenanbieters meldet anbieterspezifische Fehler. System.Data.Odbc verfügt beispielsweise über OdbcException, System.Data.OleDb über OleDbException und Microsoft.Data.SqlClient über SqlException. Um die beste Fehlerdetailebene zu erhalten, erfassen Sie diese Ausnahmen, und verwenden Sie die Member dieser Ausnahmeklassen, um Details des Fehlers abzurufen.

Zusätzlich zu den anbieterspezifischen Fehlern können .NET Framework Datenanbietertypen .NET Framework Ausnahmen auslösen, z. B. System.OutOfMemoryException und System.Threading.ThreadAbortException. Die Wiederherstellung von diesen Ausnahmen ist möglicherweise nicht möglich.

Fehlerhafte Eingaben können dazu führen, dass ein .NET Framework-Datenanbietertyp eine Ausnahme wie System.ArgumentException oder System.IndexOutOfRangeException auslöst. Das Aufrufen einer Methode zur falschen Zeit kann System.InvalidOperationException auslösen.

Schreiben Sie also im Allgemeinen einen Ausnahmehandler, der alle anbieterspezifischen Ausnahmen sowie Ausnahmen aus der Common Language Runtime abfängt. Diese können wie folgt aufgeteilt werden:

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

Oder:

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

Es ist auch möglich, dass ein Aufruf der .NET Framework Datenanbietermethode für einen Threadpoolthread ohne Benutzercode auf dem Stapel fehlschlägt. In diesem Fall und bei Verwendung asynchroner Methodenaufrufe müssen Sie das UnhandledException Ereignis registrieren, um diese Ausnahmen zu behandeln und einen Anwendungsabsturz zu vermeiden.

Eigenschaften

BatchCommand

Ruft den BatchCommand-instance ab, der den Fehler generiert hat, oder NULL, wenn die Ausnahme nicht aus einem Batch ausgelöst wurde.

Class

Ruft den Schweregrad des vom .NET Framework-Datenprovider für SQL Server zurückgegebenen Fehlers ab.

ClientConnectionId

Stellt die Clientverbindungs-ID dar. Weitere Informationen finden Sie unter Datenablaufverfolgung in ADO.NET.

Errors

Ruft eine Auflistung von mindestens einem SqlError-Objekt ab, die ausführliche Informationen über die vom .NET Framework-Datenanbieter für SQL Server generierte Ausnahmen enthält.

LineNumber

Ruft die Zeilennummer im Transact-SQL-Befehlsbatch oder in der gespeicherten Prozedur ab, die den Fehler verursacht hat.

Number

Ruft eine Nummer ab, die den Fehlertyp angibt.

Procedure

Ruft den Namen der gespeicherten Prozedur oder des Remoteprozeduraufrufs (RPC) ab, der diesen Fehler generiert hat.

Server

Ruft den Namen des Computers ab, auf dem eine Instanz von SQL Server ausgeführt wird, die den Fehler generiert hat.

Source

Ruft den Namen des Providers ab, der den Fehler generiert hat.

State

Ruft einen numerischen Fehlercode von SQL Server ab, der eine Fehler-, Warn- oder "Keine Daten gefunden"-Meldung darstellt. Weitere Informationen über das Decodieren dieser Werte finden Sie unter Datenbank-Engine – Fehler.

Methoden

GetObjectData(SerializationInfo, StreamingContext)
Veraltet.

Legt SerializationInfo mit Informationen zur Ausnahme fest.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle SqlException-Objekt darstellt, und schließt die Clientverbindungs-ID (weitere Informationen finden Sie unter ClientConnectionId) ein.

Gilt für:

Weitere Informationen