SqlException Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 |
| 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) |