SqlException Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 : 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
- Vererbung
- Vererbung
- Attribute
Beispiele
Im folgenden Beispiel wird eine SqlException Ausnahme generiert und anschließend 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 erstellt, wenn das .NET Framework Datenanbieter für SQL Server auf einen vom Server generierten Fehler stößt. (Clientseitige Fehler werden als Standard-Common Language Runtime-Ausnahmen ausgelöst.) SqlException enthält immer mindestens eine Instanz von SqlError.
Nachrichten, die einen Schweregrad von 10 oder weniger aufweisen, sind informationsmäßig und weisen auf Probleme hin, die durch Fehler in Informationen verursacht werden, die ein Benutzer eingegeben hat. Schweregrade von 11 bis 16 werden vom Benutzer generiert und können vom Benutzer korrigiert werden. Schweregrade von 17 bis 25 deuten auf Software- oder Hardwarefehler hin. Wenn ein Fehler der Ebene 17, 18 oder 19 auftritt, können Sie den Vorgang fortsetzen, obwohl Sie möglicherweise keine bestimmte Anweisung ausführen können.
Die SqlConnection bleibt offen, wenn der Schweregrad 19 oder weniger beträgt. Wenn der Schweregrad 20 oder höher ist, schließt SqlConnectionder Server die . Der Benutzer kann die Verbindung jedoch erneut öffnen und fortfahren. In beiden Fällen wird eine SqlException von der Methode generiert, die den Befehl ausführt.
Informationen zu warnungs- und Informationsmeldungen, die von SQL Server gesendet werden, finden Sie unter Datenbank-Engine Ereignisse und Fehler. Die SqlException-Klasse ist SQL Server Schweregrad zugeordnet.
Im Folgenden werden allgemeine Informationen zum Behandeln von Ausnahmen beschrieben. Ihr Code sollte Ausnahmen erfassen, um zu verhindern, dass die Anwendung abstürzt und dem Benutzer eine relevante Fehlermeldung anzeigt. Sie können Datenbanktransaktionen verwenden, um sicherzustellen, dass die Daten konsistent sind, unabhängig davon, was in der Clientanwendung passiert (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 unabhängig von Ausnahmen, die von einem Anbieter ausgelöst werden, konsistente Daten sicher. Transaktionen können fehlschlagen, sodass Fehler erfasst und die Transaktion erneut wiederholt werden.
Beachten Sie, dass SqlException ab .NET Framework 4.5 einen inneren Win32Exception zurückgeben kann.
Die Ausnahmeklasse eines .NET Framework-Datenanbieters meldet anbieterspezifische Fehler. Beispielsweise verfügt System.Data.Odbc über OdbcException, System.Data.OleDb hat OleDbException, und System.Data.SqlClient hat SqlException. Um die beste Fehlerdetailstufe zu erzielen, 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-Datentypen .NET Framework-Ausnahmen wie System.OutOfMemoryException und System.ThreadAbortException auslösen. Die Wiederherstellung dieser Ausnahmen ist möglicherweise nicht möglich.
Ungültige Eingaben können dazu führen, dass ein .NET Framework-Datentyp eine Ausnahme wie System.ArgumentException oder System.IndexOutOfRangeException auslöst. Das Aufrufen einer Methode zum falschen Zeitpunkt kann System.InvalidOperationException auslösen.
Schreiben Sie also im Allgemeinen einen Ausnahmehandler, der anbieterspezifische Ausnahmen sowie Ausnahmen von der Common Language Runtime abfangen kann. Diese können wie folgt angeordnet 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 für einen 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 den Anwendungsabsturz zu vermeiden.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Class |
Ruft den Schweregrad des Fehlers ab, der vom .NET Framework-Datenanbieter für SQL Server zurückgegeben wird. |
| 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) |
| ErrorCode |
Ruft den |
| Errors |
Ruft eine Auflistung eines oder mehrerer SqlError -Objekte ab, die detaillierte Informationen zu Ausnahmen bereitstellen, die vom .NET Framework-Datenanbieter für SQL Server generiert werden. |
| HelpLink |
Dient zum Abrufen oder Festlegen eines Links zur Hilfedatei, die dieser Ausnahme zugeordnet ist. (Geerbt von Exception) |
| HResult |
Dient zum Abrufen oder Festlegen von HRESULT, einem codierten numerischen Wert, der einer bestimmten Ausnahme zugewiesen ist. (Geerbt von Exception) |
| InnerException |
Ruft die Exception Instanz ab, die die aktuelle Ausnahme verursacht hat. (Geerbt von Exception) |
| LineNumber |
Ruft die Zeilennummer innerhalb des Transact-SQL Befehlsbatches oder der gespeicherten Prozedur ab, die den Fehler generiert hat. |
| Message |
Ruft den Text ab, der den Fehler beschreibt. |
| Message |
Ruft eine Nachricht ab, die die aktuelle Ausnahme beschreibt. (Geerbt von Exception) |
| Number |
Ruft eine Zahl ab, die den Typ des Fehlers identifiziert. |
| Procedure |
Ruft den Namen der gespeicherten Prozedur oder des Remoteprozeduraufrufs (REMOTE Procedure Call, RPC) ab, der den 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 Anbieters ab, der den Fehler generiert hat. |
| StackTrace |
Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames im Aufrufstapel ab. (Geerbt von Exception) |
| State |
Ruft einen numerischen Fehlercode aus SQL Server ab, der einen Fehler, eine Warnung oder eine Meldung "keine Daten gefunden" darstellt. Weitere Informationen zum Decodieren dieser Werte finden Sie unter Datenbankmodulereignisse und -fehler. |
| TargetSite |
Ruft die Methode ab, die die aktuelle Ausnahme auslöst. (Geerbt von Exception) |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetBaseException() |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Exception Ursache einer oder mehrerer nachfolgenden Ausnahmen zurückgegeben. (Geerbt von Exception) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Legt die SerializationInfo mit Informationen zur Ausnahme fest. |
| GetType() |
Ruft den Laufzeittyp der aktuellen Instanz ab. (Geerbt von Exception) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle SqlException Objekt darstellt und die Clientverbindungs-ID enthält (weitere Informationen finden Sie unter ClientConnectionId). |
| ToString() |
Erstellt und gibt eine Zeichenfolgendarstellung der aktuellen Ausnahme zurück. (Geerbt von Exception) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das HRESULT des Fehlers enthält. (Geerbt von ExternalException) |
Ereignisse
| Name | Beschreibung |
|---|---|
| SerializeObjectState |
Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmestatusobjekt zu erstellen, das serialisierte Daten zu der Ausnahme enthält. (Geerbt von Exception) |