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