SqlException Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
De uitzondering die wordt gegenereerd wanneer SQL Server een waarschuwing of fout retourneert. Deze klasse kan niet worden overgenomen.
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
- Overname
- Overname
- Kenmerken
Voorbeelden
In het volgende voorbeeld wordt een SqlException uitzondering gegenereerd en vervolgens weergegeven.
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
Opmerkingen
Deze klasse wordt gemaakt wanneer de .NET Framework-Data Provider voor SQL Server een fout ondervindt die is gegenereerd op basis van de server. (Fouten aan de clientzijde worden gegenereerd als standaard algemene runtime-uitzonderingen voor taal.) SqlException bevat altijd ten minste één exemplaar van SqlError.
Berichten met een ernstniveau van 10 of minder zijn informatief en geven problemen aan die worden veroorzaakt door fouten in informatie die een gebruiker heeft ingevoerd. Ernstniveaus van 11 tot en met 16 worden gegenereerd door de gebruiker en kunnen worden gecorrigeerd door de gebruiker. Ernstniveaus van 17 tot en met 25 geven software- of hardwarefouten aan. Wanneer een fout op niveau 17, 18 of 19 optreedt, kunt u doorgaan met werken, hoewel u mogelijk geen bepaalde instructie kunt uitvoeren.
Het SqlConnection blijft open wanneer het ernstniveau 19 of minder is. Wanneer het ernstniveau 20 of hoger is, wordt de server gewoonlijk gesloten SqlConnection. De gebruiker kan de verbinding echter opnieuw openen en doorgaan. In beide gevallen wordt een SqlException gegenereerd door de methode die de opdracht uitvoert.
Zie Database Engine gebeurtenissen en fouten voor informatie over de waarschuwings- en informatieve berichten die door SQL Server worden verzonden. De klasse SqlException wordt toegewezen aan SQL Server ernst.
Hieronder vindt u algemene informatie over het afhandelen van uitzonderingen. Uw code moet uitzonderingen onderscheppen om te voorkomen dat de toepassing vastloopt en om het weergeven van een relevant foutbericht aan de gebruiker toe te staan. U kunt databasetransacties gebruiken om ervoor te zorgen dat de gegevens consistent zijn, ongeacht wat er gebeurt in de clienttoepassing (inclusief een crash). Functies zoals System.Transaction.TransactionScope of de Methode BeginTransaction (in System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection en System.Data.SqlClient.SqlConnection) zorgen voor consistente gegevens, ongeacht uitzonderingen die door een provider worden gegenereerd. Transacties kunnen mislukken, dus vangstfouten en voer de transactie opnieuw uit.
Vanaf .NET Framework 4.5 kan SqlException een binnenste Win32Exception retourneren.
De uitzonderingsklasse van een .NET Framework-gegevensprovider rapporteert providerspecifieke fouten. System.Data.Odbc heeft bijvoorbeeld OdbcException, System.Data.OleDb heeft OleDbException en System.Data.SqlClient heeft SqlException. Voor het beste foutdetail kunt u deze uitzonderingen ondervangen en de leden van deze uitzonderingsklassen gebruiken om details van de fout op te halen.
Naast de providerspecifieke fouten kunnen .NET Framework-gegevensprovidertypen .NET Framework-uitzonderingen veroorzaken, zoals System.OutOfMemoryException en System.Threading.Threading.ThreadAbortException. Herstel van deze uitzonderingen is mogelijk niet mogelijk.
Ongeldige invoer kan ertoe leiden dat een .NET Framework-gegevensprovidertype een uitzondering genereert, zoals System.ArgumentException of System.IndexOutOfRangeException. Het aanroepen van een methode op het verkeerde moment kan System.InvalidOperationException verhogen.
Schrijf in het algemeen dus een uitzonderingshandler die alle providerspecifieke uitzonderingen en uitzonderingen van de algemene taalruntime onderschept. Deze kunnen als volgt worden gelaagd:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Of:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
Het is ook mogelijk dat een aanroep van een .NET Framework-gegevensprovidermethode mislukt op een threadgroep met threads zonder gebruikerscode op de stack. In dit geval moet u, wanneer u asynchrone methodeaanroepen gebruikt, de gebeurtenis registreren om deze uitzonderingen af te handelen en te voorkomen dat de UnhandledException toepassing vastloopt.
Eigenschappen
| Name | Description |
|---|---|
| Class |
Hiermee wordt het ernstniveau van de fout opgehaald uit de .NET Framework-Data Provider voor SQL Server. |
| ClientConnectionId |
Vertegenwoordigt de clientverbindings-id. Zie Gegevenstracering in ADO.NET voor meer informatie. |
| Data |
Hiermee haalt u een verzameling sleutel-waardeparen op die aanvullende door de gebruiker gedefinieerde informatie over de uitzondering bieden. (Overgenomen van Exception) |
| ErrorCode |
Hiermee wordt de |
| Errors |
Hiermee haalt u een verzameling van een of meer SqlError-objecten op die gedetailleerde informatie geven over uitzonderingen die zijn gegenereerd door de .NET Framework-Data Provider voor SQL Server. |
| HelpLink |
Hiermee haalt u een koppeling op naar het Help-bestand dat aan deze uitzondering is gekoppeld. (Overgenomen van Exception) |
| HResult |
Hiermee wordt HRESULT opgehaald of ingesteld, een gecodeerde numerieke waarde die is toegewezen aan een specifieke uitzondering. (Overgenomen van Exception) |
| InnerException |
Hiermee haalt u het Exception exemplaar op dat de huidige uitzondering heeft veroorzaakt. (Overgenomen van Exception) |
| LineNumber |
Hiermee haalt u het regelnummer op in de Transact-SQL opdrachtbatch of opgeslagen procedure waarmee de fout is gegenereerd. |
| Message |
Hiermee haalt u de tekst op waarin de fout wordt beschreven. |
| Message |
Hiermee wordt een bericht weergegeven waarin de huidige uitzondering wordt beschreven. (Overgenomen van Exception) |
| Number |
Hiermee haalt u een getal op dat het type fout aangeeft. |
| Procedure |
Hiermee haalt u de naam op van de opgeslagen procedure of externe procedure-aanroep (RPC) die de fout heeft gegenereerd. |
| Server |
Hiermee haalt u de naam op van de computer waarop een exemplaar van SQL Server wordt uitgevoerd dat de fout heeft gegenereerd. |
| Source |
Hiermee haalt u de naam op van de provider die de fout heeft gegenereerd. |
| StackTrace |
Hiermee haalt u een tekenreeksweergave van de directe frames op de aanroepstack op. (Overgenomen van Exception) |
| State |
Hiermee wordt een numerieke foutcode opgehaald uit SQL Server die een foutbericht, waarschuwing of bericht 'geen gegevens gevonden' vertegenwoordigt. Zie Database Engine gebeurtenissen en fouten voor meer informatie over het decoderen van deze waarden. |
| TargetSite |
Hiermee haalt u de methode op waarmee de huidige uitzondering wordt gegenereerd. (Overgenomen van Exception) |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetBaseException() |
Wanneer deze wordt overschreven in een afgeleide klasse, retourneert u de Exception hoofdoorzaak van een of meer volgende uitzonderingen. (Overgenomen van Exception) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Hiermee stelt u de SerializationInfo met informatie over de uitzondering in. |
| GetType() |
Hiermee haalt u het runtimetype van het huidige exemplaar op. (Overgenomen van Exception) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige SqlException object vertegenwoordigt en bevat de clientverbindings-id (zie voor meer informatie ClientConnectionId). |
| ToString() |
Hiermee maakt en retourneert u een tekenreeksweergave van de huidige uitzondering. (Overgenomen van Exception) |
| ToString() |
Retourneert een tekenreeks die het HRESULT van de fout bevat. (Overgenomen van ExternalException) |
gebeurtenis
| Name | Description |
|---|---|
| SerializeObjectState |
Treedt op wanneer een uitzondering wordt geserialiseerd om een uitzonderingsstatusobject te maken dat geserialiseerde gegevens over de uitzondering bevat. (Overgenomen van Exception) |