SqlException Osztály

Definíció

Az a kivétel, amely akkor jelenik meg, ha SQL Server figyelmeztetést vagy hibát ad vissza. Ez az osztály nem örökölhető.

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
Öröklődés
Öröklődés
Öröklődés
Attribútumok

Példák

Az alábbi példa létrehoz egy kivételt SqlException , majd megjeleníti a kivételt.

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

Megjegyzések

Ez az osztály akkor jön létre, amikor a SQL Server .NET-keretrendszer Data Provider hibát tapasztal a kiszolgálóról. (Az ügyféloldali hibák a szokásos közös nyelvi futtatókörnyezeti kivételekként jelennek meg.) SqlException mindig tartalmaz legalább egy példányt.SqlError

A 10-es vagy annál kisebb súlyosságú üzenetek tájékoztató jellegűek, és olyan problémákat jeleznek, amelyeket a felhasználó által megadott információk hibái okoznak. A 11 és 16 közötti súlyossági szinteket a felhasználó hozza létre, és a felhasználó módosíthatja. A 17 és 25 közötti súlyossági szintek szoftver- vagy hardverhibákat jeleznek. 17-es, 18-os vagy 19-es szintű hiba esetén folytathatja a munkát, bár előfordulhat, hogy nem tud végrehajtani egy adott utasítást.

A SqlConnection súlyossági szint 19-es vagy annál kisebb érték esetén is nyitva marad. Ha a súlyossági szint 20 vagy nagyobb, a kiszolgáló általában bezárja a SqlConnection. A felhasználó azonban újra megnyithatja a kapcsolatot, és folytathatja azt. A parancsot végrehajtó metódus mindkét esetben létrehoz egy SqlException parancsot.

A SQL Server által küldött figyelmeztető és tájékoztató üzenetekről további információt a Database Engine Események és hibák című témakörben talál. A SqlException osztály SQL Server súlyosságra képez le.

A kivételek kezelésével kapcsolatos általános információk a következők. A kódnak kivételeket kell kifognia, hogy megakadályozza az alkalmazás összeomlását, és lehetővé tegye a releváns hibaüzenetek megjelenítését a felhasználó számára. Adatbázis-tranzakciók használatával biztosíthatja, hogy az adatok konzisztensek legyenek, függetlenül attól, hogy mi történik az ügyfélalkalmazásban (beleértve az összeomlást is). Az olyan funkciók, mint a System.Transaction.TransactionScope vagy a BeginTransaction metódus (a System.Data.OleDb.OleDbConnection, a System.Data.ODBC.ODBCConnection és a System.Data.SqlClient.SqlConnection esetében) konzisztens adatokat biztosítanak a szolgáltató által kiváltott kivételektől függetlenül. A tranzakciók sikertelenek lehetnek, ezért a hibák észlelése és a tranzakció újrapróbálkozása.

Vegye figyelembe, hogy a .NET Framework 4.5-től kezdődően a SqlException belső Win32Exception adhat vissza.

A .NET-keretrendszer adatszolgáltatójának kivételosztálya szolgáltatóspecifikus hibákat jelent. A System.Data.Odbc-ben például az OdbcException, a System.Data.OleDb OleDbException, a System.Data.SqlClient pedig az SqlException. A hiba legapróbb részleteinek eléréséhez ragadja meg ezeket a kivételeket, és használja a kivételosztályok tagjait a hiba részleteinek lekéréséhez.

A szolgáltatóspecifikus hibák mellett a .NET keretrendszer adatszolgáltatói típusai is okozhatnak .NET Keretrendszer-kivételeket, például System.OutOfMemoryException és System.Threading.ThreadAbortException. Előfordulhat, hogy ezekből a kivételekből való helyreállítás nem lehetséges.

A helytelen bemenet miatt a .NET-keretrendszer adatszolgáltatói típusa kivételt okozhat, például System.ArgumentException vagy System.IndexOutOfRangeException. Ha nem megfelelő időpontban hív meg egy metódust, az a System.InvalidOperationException hibát okozhatja.

Ezért általában írjon egy kivételkezelőt, amely minden szolgáltatóspecifikus kivételt, valamint a közös nyelvi futtatókörnyezet kivételeit is elkapja. Ezek a következők szerint rétegzhetők:

try {
   // code here
}
catch (SqlException odbcEx) {
   // Handle more specific SqlException exception here.
}
catch (Exception ex) {
   // Handle generic ones here.
}

Vagy:

try {
   // code here
}
catch (Exception ex) {
   if (ex is SqlException) {
      // Handle more specific SqlException exception here.
   }
   else {
      // Handle generic ones here.
   }
}

Egy .NET-keretrendszer adatszolgáltatói metódushívása is meghiúsulhat egy olyan szálkészlet-szálon, amelyen nincs felhasználói kód a veremen. Ebben az esetben és aszinkron metódushívások használatakor regisztrálnia kell az eseményt a kivételek kezeléséhez és az UnhandledException alkalmazás összeomlásának elkerüléséhez.

Tulajdonságok

Name Description
Class

Lekéri a SQL Server .NET keretrendszer Data Provider visszaadott hiba súlyossági szintjét.

ClientConnectionId

Az ügyfélkapcsolat azonosítóját jelöli. További információ: Data Tracing in ADO.NET.

Data

Lekéri a kulcs-/érték párok gyűjteményét, amelyek további, felhasználó által definiált információkat biztosítanak a kivételről.

(Öröklődés forrása Exception)
ErrorCode

Lekéri a HRESULT hibát.

(Öröklődés forrása ExternalException)
Errors

Egy vagy több SqlError objektum gyűjteményét kapja meg, amely részletes információkat nyújt a .NET Keretrendszer Data Provider által a SQL Server létrehozott kivételekről.

HelpLink

Lekéri vagy beállítja a kivételhez társított súgófájlra mutató hivatkozást.

(Öröklődés forrása Exception)
HResult

Lekéri vagy beállítja a HRESULT-ot, egy kódolt numerikus értéket, amely egy adott kivételhez van hozzárendelve.

(Öröklődés forrása Exception)
InnerException

Lekéri az Exception aktuális kivételt okozó példányt.

(Öröklődés forrása Exception)
LineNumber

Lekéri a sorszámot a Transact-SQL parancskötegben vagy a hibát okozó tárolt eljárásban.

Message

Lekéri a hibát leíró szöveget.

Message

Az aktuális kivételt leíró üzenet jelenik meg.

(Öröklődés forrása Exception)
Number

Lekéri a hiba típusát azonosító számot.

Procedure

Lekéri a hibát létrehozó tárolt eljárás vagy távoli eljáráshívás (RPC) nevét.

Server

Lekéri annak a számítógépnek a nevét, amely a hibát okozó SQL Server egy példányát futtatja.

Source

Lekéri a hibát létrehozó szolgáltató nevét.

StackTrace

Lekéri a hívásverem közvetlen kereteinek sztringképét.

(Öröklődés forrása Exception)
State

Olyan numerikus hibakódot kap a SQL Server, amely hibaüzenetet, figyelmeztetést vagy "nem található adat" üzenetet jelenít meg. További információ az értékek dekódolásáról: Database Engine Események és hibák.

TargetSite

Lekéri az aktuális kivételt okozó metódust.

(Öröklődés forrása Exception)

Metódusok

Name Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetBaseException()

Ha egy származtatott osztály felül van bírálva, egy Exception vagy több későbbi kivétel kiváltó okát adja vissza.

(Öröklődés forrása Exception)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetObjectData(SerializationInfo, StreamingContext)

Beállítja a SerializationInfo kivételre vonatkozó információkat.

GetType()

Lekéri az aktuális példány futtatókörnyezeti típusát.

(Öröklődés forrása Exception)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Egy sztringet ad vissza, amely az aktuális SqlException objektumot jelöli, és tartalmazza az ügyfélkapcsolat azonosítóját (további információ: ClientConnectionId).

ToString()

A hiba HRESULT értékét tartalmazó sztringet ad vissza.

(Öröklődés forrása ExternalException)
ToString()

Létrehozza és visszaadja az aktuális kivétel sztring-ábrázolását.

(Öröklődés forrása Exception)

esemény

Name Description
SerializeObjectState
Elavult.

Akkor fordul elő, ha a kivétel szerializálva van egy kivételállapot-objektum létrehozásához, amely szerializált adatokat tartalmaz a kivételről.

(Öröklődés forrása Exception)

A következőre érvényes:

Lásd még