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á 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
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ž .NET Framework Zprostředkovatel dat pro SQL Server dojde k chybě vygenerované ze serveru. (Chyby na straně klienta jsou vyvolány jako standardní výjimky modulu CLR (Common Language Runtime).) SqlException vždy obsahuje alespoň jednu instanci SqlError.
Zprávy, které mají úroveň závažnosti 10 nebo méně, jsou informační a indikují 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 uživatel je může opravit. Úrovně závažnosti od 17 do 25 označují chyby softwaru nebo hardwaru. Pokud dojde k chybě úrovně 17, 18 nebo 19, můžete pokračovat v práci, i když možná nebudete moct provést konkrétní příkaz.
Zůstane SqlConnection otevřená, pokud je úroveň závažnosti 19 nebo méně. 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 je vygenerována SqlException metodou, která spouští příkaz.
Informace o upozornění a informačních zprávách odeslaných SQL Server najdete v tématu Database Engine Události a chyby. Třída SqlException mapuje na závažnost SQL Server.
Níže jsou uvedené obecné informace o zpracování výjimek. Kód by měl zachytit výjimky, aby se zabránilo chybovému ukončení aplikace a aby se uživateli zobrazila příslušná chybová zpráva. Pomocí databázových transakcí můžete zajistit, aby data byla konzistentní bez ohledu na to, co se stane v klientské aplikaci (včetně chybového ukončení). Funkce jako System.Transaction.TransactionScope nebo BeginTransaction metoda (v System.Data.OleDb.OleDbConnection, System.Data.ODBC.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 .NET Framework 4.5 může SqlException vrátit vnitřní Win32Exception.
Třída výjimky zprostředkovatele dat .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. Pro nejlepší úroveň podrobností o chybě zachyťte tyto výjimky a použijte členy těchto tříd výjimek k získání podrobností o chybě.
Kromě chyb specifických pro zprostředkovatele můžou .NET Typy zprostředkovatele dat rozhraní .NET Framework můžou vyvolat výjimky rozhraní .NET, jako je System.OutOfMemoryException a System.Thread.ThreadAbortException. Obnovení z těchto výjimek nemusí být možné.
Chybný vstup může způsobit, že typ zprostředkovatele dat .NET Framework vyvolá výjimku, jako je System.ArgumentException nebo System.IndexOutOfRangeException. Volání metody v nesprávné době 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 výjimky z modulu CLR (Common Language Runtime). Dají se vrstvit takto:
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é, aby volání metody poskytovatele dat .NET Framework selhalo 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
| Name | Description |
|---|---|
| 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. |
| Data |
Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce. (Zděděno od Exception) |
| ErrorCode |
|
| Errors |
Získá kolekci jednoho nebo více objektů SqlError, které poskytují podrobné informace o výjimkách vygenerovaných .NET Framework Zprostředkovatel dat 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) |
| LineNumber |
Získá číslo řádku v rámci dávky příkazu Transact-SQL nebo uložená procedura, 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 vzdálené volání procedur (RPC), který vygeneroval chybu. |
| Server |
Získá název počítače, na kterém je spuštěna instance SYSTÉMU SQL Server, který vygeneroval chybu. |
| Source |
Získá název poskytovatele, který vygeneroval chybu. |
| StackTrace |
Získá řetězcové znázornění 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 zprávu "nebyla nalezena žádná data". Další informace o dekódování těchto hodnot naleznete 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
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetBaseException() |
Při přepsání v odvozené třídě vrátí Exception to, že je původní příčinou jedné nebo více následných výjimek. (Zděděno od Exception) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo Nastaví informace o výjimce. |
| GetType() |
Získá typ modulu runtime aktuální instance. (Zděděno od Exception) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (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 naleznete v tématu ClientConnectionId). |
| ToString() |
Vrátí řetězec, který obsahuje 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
| Name | Description |
|---|---|
| SerializeObjectState |
Zastaralé.
Nastane, když je výjimka serializována vytvořit objekt stavu výjimky, který obsahuje serializovaná data o výjimce. (Zděděno od Exception) |