SqlException Classe

Definição

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 HRESULT erro do erro.

(Herdado de ExternalException)
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)

Aplica-se a

Ver também