Compartilhar via


Classe CDBException

Representa uma condição de exceção decorrente das classes de banco de dados.

Sintaxe

class CDBException : public CException

Membros

Membros de Dados Públicos

Nome Descrição
CDBException::m_nRetCode Contém um código de retorno de ODBC do tipo RETCODE.
CDBException::m_strError Contém uma cadeia de caracteres que descreve o erro em termos alfanuméricos.
CDBException::m_strStateNativeOrigin Contém uma cadeia de caracteres que descreve o erro em termos dos códigos de erro retornados pelo ODBC.

Comentários

A classe inclui dois membros de dados públicos que você pode usar para determinar a causa da exceção ou para exibir uma mensagem de texto que a descreve. Objetos CDBException são construídos e gerados por funções membro das classes de banco de dados.

Observação

Essa é uma das classes de ODBC do MFC. Se você estiver usando as classes DAO (objetos de acesso a dados) mais recentes, use CDaoException. Todos os nomes de classe DAO têm "CDao" como prefixo. Para obter mais informações, confira o artigo Visão geral: programação de banco de dados.

Exceções são casos de execução anormal que envolvem condições fora do controle do programa, como erros de E/S de rede ou da fonte de dados. Erros que você pode esperar ver no curso normal da execução do programa geralmente não são considerados exceções.

Você pode acessar esses objetos no escopo de uma expressão CATCH. Você também pode gerar objetos CDBException com base em seu código com a função global AfxThrowDBException.

Para obter mais informações sobre o tratamento de exceções em geral ou sobre objetos CDBException, confira os artigos Tratamento de exceções (MFC) e Exceções: exceções de banco de dados.

Hierarquia de herança

CObject

CException

CDBException

Requisitos

Cabeçalho: afxdb.h

CDBException::m_nRetCode

Contém um código de erro ODBC do tipo RETCODE retornado por uma função de API (interface de programação de aplicativo) do ODBC.

Comentários

Esse tipo inclui códigos prefixados por SQL definidos pelo ODBC e códigos prefixados por AFX_SQL definidos pelas classes de banco de dados. Para um CDBException, este membro conterá um dos seguintes valores:

  • AFX_SQL_ERROR_API_CONFORMANCE O driver de uma chamada CDatabase::OpenEx ou CDatabase::Open não está em conformidade com o nível de Conformidade da API do ODBC 1 (SQL_OAC_LEVEL1) obrigatório.

  • AFX_SQL_ERROR_CONNECT_FAIL Falha na conexão com a fonte de dados. Você passou um ponteiro CDatabase NULL para o construtor do conjunto de registros e a tentativa seguinte de criar uma conexão com base em GetDefaultConnect falhou.

  • AFX_SQL_ERROR_DATA_TRUNCATED Você solicitou mais dados do que o armazenamento que forneceu. Para obter informações sobre como aumentar o armazenamento de dados fornecido para os tipos de dados CString ou CByteArray, consulte o argumento nMaxLength para RFX_Text e RFX_Binary em "Macros e globais".

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Uma chamada para CRecordset::Open solicitando um dynaset falhou. O driver não dá suporte a dynasets.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Você tentou abrir uma tabela (ou o que você forneceu não pôde ser identificado como uma chamada de procedimento ou instrução SELECT), mas não há colunas identificadas nas chamadas de função RFX (troca de campo de registro) em sua substituição de DoFieldExchange.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH O tipo de uma função RFX em sua substituição de DoFieldExchange não é compatível com o tipo de dados de coluna no conjunto de registros.

  • AFX_SQL_ERROR_ILLEGAL_MODE Você chamou CRecordset::Update sem chamar CRecordset::AddNew ou CRecordset::Edit anteriormente.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Sua solicitação para bloquear registros de atualização não pôde ser atendida porque o driver ODBC não dá suporte a bloqueio.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Você chamou CRecordset::Update ou Delete para uma tabela sem chave exclusiva e alterou vários registros.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Você tentou editar ou excluir um registro excluído anteriormente. Você precisa rolar para um novo registro atual após uma exclusão.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Sua solicitação de um dynaset não pôde ser atendida porque o driver ODBC não dá suporte a atualizações posicionadas.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Você chamou CRecordset::Update ou Delete, mas quando a operação começou, o registro não pôde mais ser encontrado.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Uma tentativa de carregar ODBC.DLL falhou. O Windows não conseguiu localizar ou carregar essa DLL. Esse erro é fatal.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Sua solicitação de um dynaset não pôde ser atendida porque um driver ODBC compatível com o Nível 2 é necessário.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Uma tentativa de rolagem não teve êxito porque a fonte de dados não dá suporte à rolagem inversa.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Uma chamada para CRecordset::Open solicitando um instantâneo falhou. O driver não dá suporte a instantâneos. (Isso só deve ocorrer quando a biblioteca de cursores do ODBC ODBCCURS.DLL não está presente.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE O driver de uma chamada CDatabase::OpenEx ou CDatabase::Open não está em conformidade com o nível de Conformidade de SQL do ODBC "Mínimo" obrigatório (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL O driver ODBC não pôde especificar o tamanho total de um valor de dados CLongBinary. A operação provavelmente falhou porque um bloco de memória global não pôde ser pré-alocado.

  • AFX_SQL_ERROR_RECORDSET_READONLY Você tentou atualizar um conjunto de registros somente leitura ou a fonte de dados é somente leitura. Nenhuma operação de atualização pode ser executada com o conjunto de registros ou o objeto CDatabase ao qual ele está associado.

  • SQL_ERROR A função falhou. A mensagem de erro retornada pela função ODBC SQLError é armazenada no membro de dados m_strError.

  • SQL_INVALID_HANDLE Falha na função devido a um identificador de ambiente, identificador de conexão ou identificador de instrução inválido. Isso indica um erro de programação. Não há nenhuma informação adicional disponível da função ODBC SQLError.

Os códigos prefixados por SQL são definidos pelo ODBC. Códigos prefixados por AFX são definidos em AFXDB.H, encontrado em MFC\INCLUDE.

CDBException::m_strError

Contém uma cadeia de caracteres que descreve o erro que causou a exceção.

Comentários

A cadeia de caracteres descreve o erro em termos alfanuméricos. Para obter informações mais detalhadas e um exemplo, consulte m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Contém uma cadeia de caracteres que descreve o erro que causou a exceção.

Comentários

A cadeia de caracteres tem o formato "State:%s,Native:%ld,Origin:%s", em que os códigos de formato, em ordem, são substituídos por valores que descrevem:

  • O SQLSTATE, uma cadeia de caracteres terminada em nulo que contém um código de erro de cinco caracteres retornado no parâmetro szSqlState da função ODBC SQLError. Os valores de SQLSTATE estão listados no Apêndice A, Códigos de erro do ODBC, na Referência do Programador do ODBC. Exemplo: "S0022".

  • O código de erro nativo, específico da fonte de dados, retornado no parâmetro pfNativeError da função SQLError. Exemplo: 207.

  • O texto da mensagem de erro retornado no parâmetro szErrorMsg da função SQLError. Esta mensagem é composta por vários nomes entre colchetes. Como um erro é passado da origem para o usuário, cada componente do ODBC (fonte de dados, driver, Gerenciador de Driver) acrescenta o próprio nome. Essas informações ajudam a identificar a origem do erro. Exemplo: [Microsoft][ODBC SQL Server Driver][SQL Server]

A estrutura interpreta a cadeia de caracteres de erro e coloca seus componentes m_strStateNativeOriginem. Se m_strStateNativeOrigin contiver informações sobre mais de um erro, os erros serão separados por novas linhas. A estrutura coloca o texto do erro alfanumérico em m_strError.

Para obter informações adicionais sobre os códigos usados para criar essa cadeia de caracteres, consulte a função SQLError na Referência do Programador do ODBC.

Exemplo

Do ODBC: "Estado:S0022,Nativo:207,Origem:[Microsoft][ODBC SQL Server Driver][SQL Server] Nome de coluna inválido 'ColName'"

Em m_strStateNativeOrigin: "Estado:S0022,Nativo:207,Origem:[Microsoft][ODBC SQL Server Driver][SQL Server]"

Em m_strError: "Nome da coluna inválido 'ColName'"

Confira também

Classe CException
Gráfico da hierarquia
Classe CDatabase
Classe CRecordset
Classe CFieldExchange
CRecordset::Update
CRecordset::Delete
Classe CException