SqlException Třída

Definice

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

HRESULT Získá chybu.

(Zděděno od ExternalException)
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 null.

(Zděděno od DbException)
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)

Platí pro

Viz také