Sdílet prostřednictvím


SqlException Třída

Definice

Výjimka, která se vyvolá, 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
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
    inherit DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Dědičnost
SqlException
Atributy

Příklady

Následující příklad vygeneruje SqlException a pak zobrazí výjimku.

using Microsoft.Data.SqlClient;
using System.Text;

class Program
{
    static void Main()
    {
        string s = GetConnectionString();
        ShowSqlException(s);
        Console.ReadLine();
    }
    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());
            }
        }
    }

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code, 
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Initial Catalog=AdventureWorks;"
            + "Integrated Security=SSPI";
    }
}

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 se vyvolají jako výjimky modulu runtime standardního společného jazyka.) SqlException vždy obsahuje alespoň jednu instanci .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 generuje uživatel a může je opravit. Úrovně závažnosti od 17 do 25 značí 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.

Hodnota zůstane otevřená SqlConnection , 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 znovu otevřít připojení a pokračovat. V obou případech se vygeneruje SqlException metodou, která spouští příkaz .

Informace o upozorněních a informačních zprávách odesílaných SQL Server najdete v tématu Události a chyby databázového stroje. Třída se SqlException mapuje na závažnost SQL Server.

Níže jsou uvedené obecné informace o zpracování výjimek. Váš kód by měl zachytávat 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.Transaction.TransactionScope nebo Metoda BeginTransaction (v System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection a Microsoft.Data.SqlClient.SqlConnection) zajišťují konzistentní data bez ohledu na výjimky vyvolané poskytovatelem. Transakce můžou selhat, takže zachyťte selhání 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 Microsoft.Data.SqlClient má SqlException. Pro 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, například 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ém čase může vyvolat System.InvalidOperationException.

Obecně tedy napište obslužnou rutinu výjimky, která zachytává všechny výjimky specifické pro zprostředkovatele a také výjimky z modulu CLR (Common Language Runtime). Tyto vrstvy můžou být následující:

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 musíte zaregistrovat UnhandledException událost, aby se tyto výjimky zvládly a zabránily chybovému ukončení aplikace.

Vlastnosti

BatchCommand

Získá BatchCommand instance, která vygenerovala chybu nebo null, pokud výjimka nebyla vyvolána z dávky.

Class

Získá úroveň závažnosti chyby vrácené zprostředkovatele 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.

Errors

Získá kolekci jednoho nebo více SqlError objektů, které poskytují podrobné informace o výjimkách generovaných zprostředkovatelem dat rozhraní .NET Framework pro SQL Server.

LineNumber

Získá číslo řádku v rámci transact-SQL příkaz dávky nebo uložené procedury, která vygenerovala chybu.

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 se spuštěnou instancí SQL Server, která vygenerovala chybu.

Source

Získá název zprostředkovatele, který vygeneroval chybu.

State

Získá číselný kód chyby z SQL Server, který představuje chybu, upozornění nebo zprávu "Nenašla se žádná data". Další informace o dekódování těchto hodnot najdete v tématu Události a chyby databázového stroje.

Metody

GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Nastaví s SerializationInfo informacemi o výjimce.

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).

Platí pro

Viz také