SqlException Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Výjimka, která je vyvolán, když SQL Server vrátí upozornění nebo chybu. Tato třída se nemůže dědit.
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
- Dědičnost
- Dědičnost
- Dědičnost
- Atributy
Příklady
Následující příklad vygeneruje SqlException a pak zobrazí výjimku.
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
Poznámky
Tato třída se vytvoří vždy, když zprostředkovatel dat rozhraní .NET Framework pro SQL Server narazí na chybu vygenerovanou ze serveru. (Chyby na straně klienta jsou vyvolány jako standardní výjimky modulu Common Language Runtime.) SqlException vždy obsahuje alespoň jednu instanci objektu SqlError.
Zprávy, které mají úroveň závažnosti 10 nebo nižší, jsou informativní a označují problémy způsobené chybami v informacích, které uživatel zadal. Úrovně závažnosti od 11 do 16 jsou generovány uživatelem a může je opravit. Úrovně závažnosti od 17 do 25 označují chyby softwaru nebo hardwaru. Když dojde k chybě úrovně 17, 18 nebo 19, můžete pokračovat v práci, i když nemusí být možné provést konkrétní příkaz.
Zůstane SqlConnection otevřená, pokud je úroveň závažnosti 19 nebo nižší. Pokud je úroveň závažnosti 20 nebo vyšší, server obvykle zavře SqlConnection. Uživatel ale může připojení znovu otevřít a pokračovat. V obou případech SqlException je vygenerován metodou, která spouští příkaz.
Informace o upozorněních a informačních zprávách odesílaných SQL Serverem najdete v tématu Události a chyby databázového stroje. Třída se SqlException mapuje na závažnost SQL Serveru.
Následuje obecné informace o zpracování výjimek. Váš kód by měl zachytit výjimky, aby se zabránilo chybovému ukončení aplikace a aby se uživateli zobrazila relevantní chybová zpráva. Databázové transakce můžete použít k zajištění konzistence dat bez ohledu na to, co se stane v klientské aplikaci (včetně chybového ukončení). Funkce jako System.TransactionScope nebo BeginTransaction metoda (v System.Data.OleDb.OleDbConnection, System.Data.ODBCConnection a System.Data.SqlClient.SqlConnection) zajišťují konzistentní data bez ohledu na výjimky vyvolané poskytovatelem. Transakce můžou selhat, takže zachyťte chyby a zkuste transakci zopakovat.
Všimněte si, že počínaje rozhraním .NET Framework 4.5 SqlException může vrátit vnitřní Win32Exception.
Třída výjimky zprostředkovatele dat rozhraní .NET Framework hlásí chyby specifické pro zprostředkovatele. Například System.Data.Odbc má OdbcException, System.Data.OleDb má OleDbException a System.Data.SqlClient má SqlException. Pokud chcete získat nejlepší úroveň podrobností o chybě, zachyťte tyto výjimky a pomocí členů těchto tříd výjimek získejte podrobnosti o chybě.
Kromě chyb specifických pro zprostředkovatele mohou typy zprostředkovatelů dat rozhraní .NET Framework vyvolat výjimky rozhraní .NET Framework, jako jsou System.OutOfMemoryException a System.ThreadAbortException. Obnovení z těchto výjimek nemusí být možné.
Chybný vstup může způsobit, že typ zprostředkovatele dat rozhraní .NET Framework vyvolá výjimku, například System.ArgumentException nebo System.IndexOutOfRangeException. Volání metody v nesprávný čas může vyvolat System.InvalidOperationException.
Obecně tedy napište obslužnou rutinu výjimky, která zachytí všechny výjimky specifické pro zprostředkovatele a také výjimky z modulu CLR (Common Language Runtime). Můžete je vrstvit následujícím způsobem:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Nebo:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
Je také možné, že volání metody zprostředkovatele dat rozhraní .NET Framework selže ve vlákně fondu vláken bez uživatelského kódu v zásobníku. V tomto případě a při použití asynchronních volání metod je nutné zaregistrovat UnhandledException událost, aby se tyto výjimky zvládly a zabránily chybovému ukončení aplikace.
Vlastnosti
BatchCommand |
Pokud došlo k vyvolání DbExceptionDbBatchpři provádění příkazu , odkazuje na konkrétní DbBatchCommand , která výjimku aktivovala. (Zděděno od DbException) |
Class |
Získá úroveň závažnosti chyby vrácené z zprostředkovatel dat rozhraní .NET Framework pro SQL Server. |
ClientConnectionId |
Představuje ID připojení klienta. Další informace najdete v tématu Trasování dat v ADO.NET. |
Data |
Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce. (Zděděno od Exception) |
DbBatchCommand |
Při přepsání v odvozené třídě, pokud byl DbException vyvolán při provádění DbBatch, odkazuje na konkrétní DbBatchCommand , který aktivoval výjimku. (Zděděno od DbException) |
ErrorCode |
|
Errors |
Získá kolekci jednoho nebo více SqlError objektů, které poskytují podrobné informace o výjimkách vygenerovaných zprostředkovatelem dat rozhraní .NET Framework pro SQL Server. |
HelpLink |
Získá nebo nastaví odkaz na soubor nápovědy přidružené k této výjimce. (Zděděno od Exception) |
HResult |
Získá nebo nastaví HRESULT, kódovanou číselnou hodnotu, která je přiřazena ke konkrétní výjimce. (Zděděno od Exception) |
InnerException |
Exception Získá instanci, která způsobila aktuální výjimku. (Zděděno od Exception) |
IsTransient |
Určuje, jestli by chyba reprezentovaná touto DbException chybou mohla být přechodnou chybou, tj. pokud by opakování operace aktivace mohlo proběhnout úspěšně bez jakékoli jiné změny. (Zděděno od DbException) |
LineNumber |
Získá číslo řádku v rámci transact-SQL příkaz dávky nebo uložené procedury, která vygenerovala chybu. |
Message |
Získá text popisující chybu. |
Message |
Získá zprávu, která popisuje aktuální výjimku. (Zděděno od Exception) |
Number |
Získá číslo, které identifikuje typ chyby. |
Procedure |
Získá název uložené procedury nebo volání vzdálené procedury (RPC), která vygenerovala chybu. |
Server |
Získá název počítače, ve kterém je spuštěna instance SYSTÉMU SQL Server, která vygenerovala chybu. |
Source |
Získá název zprostředkovatele, který vygeneroval chybu. |
SqlState |
Pro poskytovatele databáze, kteří ho podporují, obsahuje standardní 5míselný návratový kód SQL označující úspěch nebo selhání databázové operace. První 2 znaky představují třídu návratového kódu (např. chyba, úspěch), zatímco poslední 3 znaky představují podtřídu, což umožňuje detekci chybových scénářů přenositelným způsobem databáze. Pro poskytovatele databází, kteří ho nepodporují, nebo pro nepoužitelné chybové scénáře obsahuje |
StackTrace |
Získá řetězcovou reprezentaci okamžitých rámců v zásobníku volání. (Zděděno od Exception) |
State |
Získá číselný kód chyby z SQL Serveru, který představuje chybu, upozornění nebo "nenašla se žádná data" zprávy. Další informace o dekódování těchto hodnot najdete v tématu Události a chyby databázového stroje. |
TargetSite |
Získá metodu, která vyvolá aktuální výjimku. (Zděděno od Exception) |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetBaseException() |
Při přepsání v odvozené třídě vrátí Exception hodnotu, která je původní příčinou jedné nebo více následných výjimek. (Zděděno od Exception) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Nastaví s SerializationInfo informacemi o výjimce. |
GetObjectData(SerializationInfo, StreamingContext) |
Zastaralé.
Při přepsání v odvozené třídě nastaví SerializationInfo s informacemi o výjimce. (Zděděno od Exception) |
GetType() |
Získá typ modulu runtime aktuální instance. (Zděděno od Exception) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální SqlException objekt a obsahuje ID připojení klienta (další informace najdete v tématu ClientConnectionId). |
ToString() |
Vrátí řetězec, který obsahuje hodnotu HRESULT chyby. (Zděděno od ExternalException) |
ToString() |
Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky. (Zděděno od Exception) |
Událost
SerializeObjectState |
Zastaralé.
Nastane, když je výjimka serializována k vytvoření objektu stavu výjimky, který obsahuje serializovaná data o výjimce. (Zděděno od Exception) |