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
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
ouCDatabase::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 emGetDefaultConnect
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
ouCByteArray
, consulte o argumentonMaxLength
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 chamarCRecordset::AddNew
ouCRecordset::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
ouDelete
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
ouDelete
, 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
ouCDatabase::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 dadosm_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_strStateNativeOrigin
em. 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