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

Beispiele

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

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

Hinweise

Diese Klasse wird immer dann erstellt, wenn beim .NET Framework-Datenanbieter für SQL Server ein Fehler auftritt, der vom Server generiert wird. (Clientseitige Fehler werden als Standardausnahmen der Common Language Runtime ausgelöst.) SqlException enthält immer mindestens eine Instanz von SqlError.

Nachrichten mit einem Schweregrad von 10 oder weniger sind informationserregend und weisen auf Probleme hin, die durch Fehler in den Von einem Benutzer eingegebenen Informationen verursacht werden. 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 weiterarbeiten, obwohl Sie möglicherweise nicht in der Lage sind, eine bestimmte Anweisung auszuführen.

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 .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 von SQL Server gesendeten Warnungen und Informationsmeldungen finden Sie unter Ereignisse und Fehler der Datenbank-Engine. Die SqlException -Klasse wird dem 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 System.Data.SqlClient.SqlConnection) stellen konsistente Daten sicher, 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 System.Data.SqlClient über SqlException. Um die beste Ebene der Fehlerdetails zu erhalten, fangen Sie diese Ausnahmen ab, und verwenden Sie die Member dieser Ausnahmeklassen, um Details zum Fehler 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.

Eine fehlerhafte Eingabe kann 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 überschichtet 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 .NET Framework-Datenanbietermethodenaufruf in einem Threadpoolthread ohne Benutzercode im Stapel fehlschlägt. In diesem Fall und bei Verwendung asynchroner Methodenaufrufe müssen Sie das UnhandledException Ereignis registrieren, um diese Ausnahmen zu behandeln und Anwendungsabsturz zu vermeiden.

Eigenschaften

BatchCommand

Wenn dies DbException beim Ausführen eines DbBatchausgelöst wurde, verweist auf die Spezifische DbBatchCommand , die die Ausnahme ausgelöst hat.

(Geerbt von DbException)
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.

Data

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen zur Ausnahme bereitstellen.

(Geerbt von Exception)
DbBatchCommand

Wenn dies DbException beim Überschreiben in einer abgeleiteten Klasse beim Ausführen von DbBatchausgelöst wurde, verweist auf die Spezifische DbBatchCommand , die die Ausnahme ausgelöst hat.

(Geerbt von DbException)
ErrorCode

Ruft das HRESULT des Fehlers ab.

(Geerbt von ExternalException)
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.

HelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.

(Geerbt von Exception)
HResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.

(Geerbt von Exception)
InnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.

(Geerbt von Exception)
IsTransient

Gibt an, ob der Fehler, der von dieser DbException dargestellt wird, ein vorübergehender Fehler sein könnte, d. h., ob die Wiederholung des Auslösevorgangs ohne sonstige Änderung erfolgreich sein könnte.

(Geerbt von DbException)
LineNumber

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

Message

Ruft den Text ab, der den Fehler beschreibt.

Message

Ruft eine Meldung ab, mit der die aktuelle Ausnahme beschrieben wird.

(Geerbt von Exception)
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.

SqlState

Enthält für Datenbankanbieter, die dies unterstützen, einen standardmäßigen SQL 5-Zeichenrückgabecode, der angibt, ob der Datenbankvorgang erfolgreich war oder nicht. Die ersten 2 Zeichen stellen die Klasse des Rückgabecodes (z. B. Fehler, Erfolg) dar, während die letzten 3 Zeichen die Unterklasse darstellen und die Erkennung von Fehlerszenarios auf datenbankportierbare Weise ermöglichen.

Für Datenbankanbieter, die dies nicht unterstützen, oder für nicht anwendbare Fehlerszenarios ist null enthalten.

(Geerbt von DbException)
StackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.

(Geerbt von Exception)
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.

TargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.

(Geerbt von Exception)

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die Grundursache für eine oder mehrere nachfolgende Ausnahmen ist.

(Geerbt von Exception)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetObjectData(SerializationInfo, StreamingContext)

Legt SerializationInfo mit Informationen zur Ausnahme fest.

GetObjectData(SerializationInfo, StreamingContext)
Veraltet.

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.

(Geerbt von Exception)
GetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.

(Geerbt von Exception)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
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.

ToString()

Gibt eine Zeichenfolge zurück, die das HRESULT des Fehlers enthält.

(Geerbt von ExternalException)
ToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.

(Geerbt von Exception)

Ereignisse

SerializeObjectState
Veraltet.

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt mit serialisierten Daten über die Ausnahme zu erstellen.

(Geerbt von Exception)

Gilt für:

Weitere Informationen