SqlException Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
A exceção que é lançada quando o SQL Server devolve um aviso ou erro. Esta classe não pode ser herdada.
public ref class SqlException sealed : SystemException
public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
inherit SystemException
[<System.Serializable>]
type SqlException = class
inherit DbException
Public NotInheritable Class SqlException
Inherits SystemException
Public NotInheritable Class SqlException
Inherits DbException
- Herança
- Herança
- Atributos
Exemplos
O exemplo seguinte gera uma SqlException e depois apresenta a exceção.
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
Observações
Esta classe é criada sempre que o .NET Framework Data Provider para SQL Server encontra um erro gerado pelo servidor. (Erros do lado do cliente são apresentados como exceções padrão em tempo de execução em linguagem comum.) SqlException contém sempre pelo menos uma instância de SqlError.
Mensagens com um nível de gravidade de 10 ou menos são informativas e indicam problemas causados por erros na informação que um utilizador inseriu. Os níveis de gravidade de 11 a 16 são gerados pelo utilizador e podem ser corrigidos pelo utilizador. Níveis de gravidade de 17 a 25 indicam erros de software ou hardware. Quando ocorre um erro de nível 17, 18 ou 19, pode continuar a trabalhar, embora possa não conseguir executar uma determinada instrução.
Permanece SqlConnection aberto quando o nível de gravidade é de 19 ou menos. Quando o nível de gravidade é 20 ou superior, o servidor normalmente fecha o SqlConnection. No entanto, o utilizador pode reabrir a ligação e continuar. Em ambos os casos, a SqlException é gerado pelo método que executa o comando.
Para informações sobre os avisos e mensagens informativas enviadas por SQL Server, consulte Database Engine Eventos e Erros. A classe SqlException corresponde à gravidade SQL Server.
Segue-se informação geral sobre o tratamento de exceções. O seu código deve detetar exceções para evitar que a aplicação crashe e para permitir a apresentação de uma mensagem de erro relevante ao utilizador. Pode usar transações na base de dados para garantir que os dados são consistentes independentemente do que acontece na aplicação cliente (incluindo um crash). Funcionalidades como System.Transaction.TransactionScope ou o método BeginTransaction (em System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection e System.Data.SqlClient.SqlConnection) garantem dados consistentes independentemente das exceções levantadas por um fornecedor. As transações podem falhar, por isso apanha falhas e tente novamente.
Note-se que, a partir de .NET Framework 4.5, SqlException pode devolver um Win32Exception interno.
A classe de exceção de um fornecedor de dados do .NET Framework reporta erros específicos do fornecedor. Por exemplo, System.Data.Odbc tem OdbcException, System.Data.OleDb tem OleDbException, e System.Data.SqlClient tem SqlException. Para obter o melhor nível de detalhe do erro, detete essas exceções e use os membros dessas classes de exceção para obter detalhes do erro.
Para além dos erros específicos de cada fornecedor, os tipos de dados do .NET Framework podem gerar exceções do .NET Framework, como System.OutOfMemoryException e System.Threading.ThreadAbortException. A recuperação destas exceções pode não ser possível.
Uma má entrada pode fazer com que um tipo de fornecedor de dados do .NET Framework levante uma exceção como System.ArgumentException ou System.IndexOutOfRangeException. Chamar um método no momento errado pode levantar System.InvalidOperationException.
Portanto, em geral, escreve um handler de exceções que apanhe quaisquer exceções específicas do fornecedor, bem como exceções do runtime da linguagem comum. Estes podem ser sobrepostos da seguinte forma:
try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
Ou:
try {
// code here
}
catch (Exception ex) {
if (ex is SqlException) {
// Handle more specific SqlException exception here.
}
else {
// Handle generic ones here.
}
}
Também é possível que uma chamada de método de fornecedor de dados do .NET Framework falhe num thread pool sem código de utilizador na pilha. Neste caso, e ao usar chamadas de método assíncronas, deve registar o UnhandledException evento para gerir essas exceções e evitar falhas da aplicação.
Propriedades
| Name | Description |
|---|---|
| Class |
Obtém o nível de gravidade do erro devolvido do .NET Framework Data Provider para SQL Server. |
| ClientConnectionId |
Representa o ID da ligação do cliente. Para mais informações, consulte Rastreamento de Dados em ADO.NET. |
| Data |
Obtém uma coleção de pares chave/valor que fornecem informação adicional definida pelo utilizador sobre a exceção. (Herdado de Exception) |
| ErrorCode |
Obtém o |
| Errors |
Obtém uma coleção de um ou mais objetos SqlError que fornecem informações detalhadas sobre exceções geradas pelo Data Provider do .NET Framework para SQL Server. |
| HelpLink |
Obtém ou define um link para o ficheiro de ajuda associado a esta exceção. (Herdado de Exception) |
| HResult |
Recebe ou define HRESULT, um valor numérico codificado atribuído a uma exceção específica. (Herdado de Exception) |
| InnerException |
Obtém a Exception instância que causou a exceção atual. (Herdado de Exception) |
| LineNumber |
Obtém o número da linha dentro do lote de comandos Transact-SQL ou procedimento armazenado que gerou o erro. |
| Message |
Recebe o texto que descreve o erro. |
| Message |
Recebe uma mensagem que descreve a exceção atual. (Herdado de Exception) |
| Number |
Obtém um número que identifica o tipo de erro. |
| Procedure |
Obtém o nome do procedimento armazenado ou chamada de procedimento remoto (RPC) que gerou o erro. |
| Server |
Obtém o nome do computador que está a correr uma instância do SQL Server que gerou o erro. |
| Source |
Obtém o nome do fornecedor que gerou o erro. |
| StackTrace |
Obtém uma representação string dos frames imediatos na stack de chamadas. (Herdado de Exception) |
| State |
Recebe um código de erro numérico do SQL Server que representa um erro, aviso ou mensagem de "nenhum dado encontrado". Para mais informações sobre como decodificar estes valores, consulte Database Engine Eventos e Erros. |
| TargetSite |
Obtém o método que lança a exceção atual. (Herdado de Exception) |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetBaseException() |
Quando sobrescrito numa classe derivada, devolve o Exception que é a causa raiz de uma ou mais exceções subsequentes. (Herdado de Exception) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Define a SerializationInfo informação sobre a exceção. |
| GetType() |
Obtém o tipo de execução da instância atual. (Herdado de Exception) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma string que representa o objeto atual SqlException e inclui o ID de ligação do cliente (para mais informações, ver ClientConnectionId). |
| ToString() |
Cria e devolve uma representação string da exceção atual. (Herdado de Exception) |
| ToString() |
Devolve uma string que contém o HRESULT do erro. (Herdado de ExternalException) |
evento
| Name | Description |
|---|---|
| SerializeObjectState |
Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção. (Herdado de Exception) |