Tratamento de Erros e Mensagens

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Quando uma aplicação chama uma função ODBC, o driver executa a função e retorna informação de diagnóstico de duas formas: um código de retorno indica o sucesso ou falha global de uma função ODBC, e os registos de diagnóstico fornecem informações detalhadas sobre a função. Os registos de diagnóstico incluem um registo de cabeçalho e registos de estado. Pelo menos um registo de diagnóstico, o registo de cabeçalho, é devolvido mesmo que a função tenha sucesso.

A informação de diagnóstico é usada no tempo do desenvolvimento para detetar erros de programação, como handles inválidos e erros de sintaxe em instruções SQL codificadas fixamente. Também é utilizado em tempo de execução para detetar erros e avisos em tempo de execução, como truncamento de dados, violações de regras e erros de sintaxe em instruções SQL introduzidas pelo utilizador. A lógica do programa baseia-se geralmente em códigos de retorno.

Por exemplo, após uma aplicação chamar SQLFetch para recuperar as linhas de um conjunto de resultados, o código de retorno indica se o fim do conjunto de resultados foi alcançado (SQL_NO_DATA), se foram devolvidas mensagens informativas (SQL_SUCCESS_WITH_INFO), ou se ocorreu um erro (SQL_ERROR).

Se o driver ODBC do SQL Server Native Client devolver algo diferente de SQL_SUCCESS, a aplicação pode chamar SQLGetDiagRec para recuperar quaisquer mensagens informativas ou de erro. Use SQLGetDiagRec para subir e descer o conjunto de mensagens se houver mais do que uma mensagem.

O código de retorno SQL_INVALID_HANDLE indica sempre um erro de programação e nunca deve ser encontrado em tempo de execução. Todos os outros códigos de retorno fornecem informação em tempo de execução, embora SQL_ERROR possam indicar um erro de programação.

A API nativa Microsoft SQL Server original, DB-Library de C, permite que uma aplicação instale funções de tratamento de erros e mensagens de callback que retornam erros ou mensagens. Algumas instruções Transact-SQL, como PRINT, RAISERROR, DBCC e SET, devolvem os seus resultados à função de manipulador de mensagens DB-Library em vez de a um conjunto de resultados. No entanto, a API ODBC não tem essa capacidade de callback. Quando o driver ODBC SQL Server Native Client deteta mensagens provenientes de SQL Server, define o código de retorno ODBC para SQL_SUCCESS_WITH_INFO ou SQL_ERROR e devolve a mensagem como um ou mais registos de diagnóstico. Portanto, uma aplicação ODBC deve testar cuidadosamente estes códigos de retorno e chamar SQLGetDiagRec para recuperar os dados da mensagem.

Para informações sobre erros de rastreamento, consulte Rastreio de Acesso a Dados. Para informações sobre melhorias no rastreio de erros adicionadas no SQL Server 2012 (11.x), consulte Acesso à Informação de Diagnóstico no Registo de Eventos Estendido.

Na presente seção

Ver também

SQL Server Cliente Nativo (ODBC)