SqlException Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Undantaget som utlöses när SQL Server returnerar en varning eller ett fel. Det går inte att ärva den här klassen.
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
- Arv
- Arv
- Attribut
Exempel
Följande exempel genererar en SqlException och visar sedan undantaget.
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
Kommentarer
Den här klassen skapas när .NET Framework-Data Provider för SQL Server påträffar ett fel som genereras från servern. (Fel på klientsidan utlöses som vanliga vanliga språkkörningsundantag.) SqlException innehåller alltid minst en instans av SqlError.
Meddelanden som har en allvarlighetsgrad på 10 eller mindre är informationsbaserade och indikerar problem som orsakas av misstag i information som en användare har angett. Allvarlighetsgraderna från 11 till 16 genereras av användaren och kan korrigeras av användaren. Allvarlighetsgraderna från 17 till 25 indikerar programvaru- eller maskinvarufel. När ett fel på nivå 17, 18 eller 19 inträffar kan du fortsätta att arbeta, även om du kanske inte kan köra en viss instruktion.
Förblir SqlConnection öppen när allvarlighetsgraden är 19 eller mindre. När allvarlighetsgraden är 20 eller högre stänger SqlConnectionservern vanligtvis . Användaren kan dock öppna anslutningen igen och fortsätta. I båda fallen genereras en SqlException av metoden som kör kommandot.
Information om varnings- och informationsmeddelanden som skickas av SQL Server finns i Database Engine Händelser och fel. Klassen SqlException mappas till SQL Server allvarlighetsgrad.
Följande är allmän information om hantering av undantag. Koden bör fånga undantag för att förhindra att programmet kraschar och för att tillåta att ett relevant felmeddelande visas för användaren. Du kan använda databastransaktioner för att säkerställa att data är konsekventa oavsett vad som händer i klientprogrammet (inklusive en krasch). Funktioner som System.Transaction.TransactionScope eller Metoden BeginTransaction (i System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection och System.Data.SqlClient.SqlConnection) säkerställer konsekventa data oavsett undantag som genereras av en provider. Transaktioner kan misslyckas, så fånga fel och försök igen.
Observera att från och med .NET Framework 4.5 kan SqlException returnera en inre Win32Exception.
Undantagsklassen för en .NET Framework-dataprovider rapporterar providerspecifika fel. System.Data.Odbc har till exempel OdbcException, System.Data.OleDb har OleDbException och System.Data.SqlClient har SqlException. För den bästa felnivån kan du fånga dessa undantag och använda medlemmarna i dessa undantagsklasser för att få information om felet.
Förutom de providerspecifika felen kan .NET Framework-dataprovidertyper generera .NET Framework-undantag som System.OutOfMemoryException och System.Threading.ThreadAbortException. Återställning från dessa undantag kanske inte är möjlig.
Felaktiga indata kan orsaka att en .NET Framework-dataprovidertyp skapar ett undantag, till exempel System.ArgumentException eller System.IndexOutOfRangeException. Om du anropar en metod vid fel tidpunkt kan System.InvalidOperationException genereras.
Skriv därför i allmänhet en undantagshanterare som fångar alla providerspecifika undantag samt undantag från den vanliga språkkörningen. Dessa kan vara skiktade på följande sätt:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Eller:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
Det är också möjligt att ett .NET Framework-metodanrop för dataprovidern misslyckas på en trådpoolstråd utan användarkod i stacken. I det här fallet, och när du använder asynkrona metodanrop, måste du registrera UnhandledException händelsen för att hantera dessa undantag och undvika programkrasch.
Egenskaper
| Name | Description |
|---|---|
| Class |
Hämtar allvarlighetsgraden för felet som returneras från .NET Framework-Data Provider för SQL Server. |
| ClientConnectionId |
Representerar klientanslutnings-ID:t. Mer information finns i Dataspårning i ADO.NET. |
| Data |
Hämtar en samling nyckel/värde-par som ger ytterligare användardefinierad information om undantaget. (Ärvd från Exception) |
| ErrorCode |
|
| Errors |
Hämtar en samling med ett eller flera SqlError objekt som ger detaljerad information om undantag som genereras av .NET Framework-Data Provider för SQL Server. |
| HelpLink |
Hämtar eller anger en länk till hjälpfilen som är associerad med det här undantaget. (Ärvd från Exception) |
| HResult |
Hämtar eller anger HRESULT, ett kodat numeriskt värde som har tilldelats ett specifikt undantag. (Ärvd från Exception) |
| InnerException |
Hämtar den Exception instans som orsakade det aktuella undantaget. (Ärvd från Exception) |
| LineNumber |
Hämtar radnumret i Transact-SQL kommandobatch eller lagrad procedur som genererade felet. |
| Message |
Hämtar texten som beskriver felet. |
| Message |
Hämtar ett meddelande som beskriver det aktuella undantaget. (Ärvd från Exception) |
| Number |
Hämtar ett tal som identifierar typen av fel. |
| Procedure |
Hämtar namnet på den lagrade proceduren eller fjärrproceduranropet (RPC) som genererade felet. |
| Server |
Hämtar namnet på datorn som kör en instans av SQL Server som genererade felet. |
| Source |
Hämtar namnet på providern som genererade felet. |
| StackTrace |
Hämtar en strängrepresentation av de omedelbara ramarna i anropsstacken. (Ärvd från Exception) |
| State |
Hämtar en numerisk felkod från SQL Server som representerar ett meddelande om fel, varning eller "inga data hittades". Mer information om hur du avkodar dessa värden finns i Database Engine Händelser och fel. |
| TargetSite |
Hämtar den metod som utlöser det aktuella undantaget. (Ärvd från Exception) |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetBaseException() |
När den åsidosätts i en härledd klass returnerar den Exception som är rotorsaken till ett eller flera efterföljande undantag. (Ärvd från Exception) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo Anger med information om undantaget. |
| GetType() |
Hämtar körningstypen för den aktuella instansen. (Ärvd från Exception) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella SqlException objektet och innehåller klientanslutnings-ID :t (mer information finns i ClientConnectionId). |
| ToString() |
Skapar och returnerar en strängrepresentation av det aktuella undantaget. (Ärvd från Exception) |
| ToString() |
Returnerar en sträng som innehåller HRESULT för felet. (Ärvd från ExternalException) |
Händelser
| Name | Description |
|---|---|
| SerializeObjectState |
Inträffar när ett undantag serialiseras för att skapa ett undantagstillståndsobjekt som innehåller serialiserade data om undantaget. (Ärvd från Exception) |