Partilhar via


Classe CDBException

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

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

Sintaxe

class CDBException : public CException

Membros

Membros de Dados Públicos

Nome Description
CDBException::m_nRetCode Contém um código de retorno de Conectividade de Base de Dados Aberta (ODBC), do tipo RETCODE.
CDBException::m_strError Contém uma cadeia que descreve o erro em termos alfanuméricos.
CDBException::m_strStateNativeOrigin Contém uma cadeia que descreve o erro em termos dos códigos de erro devolvidos pelo ODBC.

Observações

A classe inclui dois membros de dados públicos que pode usar para determinar a causa da exceção ou para mostrar uma mensagem de texto a descrever a exceção. CDBException Os objetos são construídos e lançados por funções membros das classes da base de dados.

Observação

Esta classe é uma das classes de Conectividade de Bases de Dados Abertas (ODBC) da MFC. Se estiver a usar as classes mais recentes Data Access Objects (DAO), use CDaoException . Todos os nomes de classes DAO têm "CDao" como prefixo. Para mais informações, consulte o artigo Visão Geral: Programação de Bases de Dados.

Exceções são casos de execução anormal envolvendo condições fora do controlo do programa, como erros de fonte de dados ou de E/S de rede. Erros que poderia esperar encontrar no curso normal da execução do seu programa geralmente não são considerados exceções.

Pode aceder a estes objetos dentro do âmbito de uma expressão CATCH . Também podes lançar CDBException objetos do teu próprio código com a AfxThrowDBException função global.

Para mais informações sobre o tratamento de exceções em geral, ou sobre CDBException objetos, consulte os artigos Tratamento de Exceções (MFC) e Exceções: Exceções de Base de Dados.

Hierarquia de herança

CObject

CExcepção

CDBException

Requerimentos

Cabeçalho: afxdb.h

CDBException::m_nRetCode

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

Observações

Este tipo inclui códigos com prefixo SQL definidos pelo ODBC e códigos com prefixo AFX_SQL definidos pelas classes da base de dados. Para um CDBException, este elemento conterá um dos seguintes valores:

  • AFX_SQL_ERROR_API_CONFORMANCE O driver para uma CDatabase::OpenEx chamada ou CDatabase::Open não cumpre o nível 1 de conformidade da API ODBC exigido (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL A ligação à fonte de dados falhou. Passaste um ponteiro NULL CDatabase para o construtor do teu conjunto de registos e a tentativa subsequente de criar uma ligação baseada em GetDefaultConnect falhou.

  • AFX_SQL_ERROR_DATA_TRUNCATED Solicitou mais dados do que forneceu armazenamento. Para informações sobre o aumento do armazenamento de dados fornecido para CString ou CByteArray tipos de dados, consulte o nMaxLength argumento para RFX_Text e RFX_Binary em "Macros e Globais."

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Um apelo para CRecordset::Open pedir uma dinaseta falhou. Os dínacos não são suportados pelo driver.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Tentou abrir uma tabela (ou o que forneceu não pôde ser identificado como chamada de procedimento ou instrução SELECT ), mas não há colunas identificadas nas chamadas de função de troca de campos de registo (RFX) no seu DoFieldExchange override.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH O tipo de função RFX no seu DoFieldExchange override não é compatível com o tipo de dados da coluna no conjunto de registos.

  • AFX_SQL_ERROR_ILLEGAL_MODE Ligou CRecordset::Update sem ligar CRecordset::AddNew antes ou CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED O seu pedido para bloquear registos para atualização não pôde ser cumprido porque o seu driver ODBC não suporta bloqueio.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Chamou CRecordset::Update ou Delete pediu uma tabela sem chave única e alterou vários registos.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Tentou editar ou eliminar um registo previamente eliminado. Deve deslocar-se até a um novo registo atual após uma eliminação.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES O seu pedido de dynaset não pôde ser satisfeito porque o seu driver ODBC não suporta atualizações posicionadas.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Ligou CRecordset::Update ou Delete, mas quando a operação começou, o registo já não podia ser encontrado.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Uma tentativa de carregar o ODBC.DLL falhou; O Windows não conseguiu encontrar ou não conseguiu carregar esta DLL. Este erro é fatal.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED O seu pedido de um dynaset não pôde ser satisfeito porque é necessário um driver ODBC compatível com o Nível 2.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Uma tentativa de scroll não teve sucesso porque a fonte de dados não suporta scroll para trás.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Uma chamada para CRecordset::Open pedir um snapshot falhou. Snapshots não são suportados pelo driver. (Isto só deve acontecer quando a ODBCCURS.DLL da biblioteca de cursores ODBC não está presente.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE O driver para uma CDatabase::OpenEx chamada ou CDatabase::Open não cumpre o nível de conformidade ODBC SQL exigido de "Minimum" (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL O controlador ODBC não conseguiu especificar o tamanho total de um CLongBinary valor de dados. A operação provavelmente falhou porque um bloco de memória global não podia ser pré-realocado.

  • AFX_SQL_ERROR_RECORDSET_READONLY Tentou atualizar um conjunto de registos apenas de leitura, ou a fonte de dados é apenas leitura. Não podem ser realizadas operações de atualização com o conjunto de registos ou com o CDatabase objeto a que está associado.

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

  • SQL_INVALID_HANDLE Função falhou devido a um handle de ambiente, handle de ligação ou handle de instrução inválidos. Isto indica um erro de programação. Não está disponível informação adicional a partir da função SQLErrorODBC.

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

CDBException::m_strError

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

Observações

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

CDBException::m_strStateNativeOrigin

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

Observações

A cadeia é da forma "State:%s,Native:%ld,Origin:%s", onde os códigos de formato, por ordem, são substituídos por valores que descrevem:

  • O SQLSTATE, uma cadeia terminada por nulo contendo um código de erro de cinco caracteres, retornava no parâmetro szSqlState da função SQLErrorODBC . Os valores SQLSTATE estão listados no Apêndice A, Códigos de Erro ODBC, na Referência do Programador ODBC. Exemplo: "S0022".

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

  • O texto da mensagem de erro foi retornado no parâmetro szErrorMsg da SQLError função. Esta mensagem consiste em vários nomes colocados entre parênteses. À medida que um erro é passado da sua fonte para o utilizador, cada componente ODBC (fonte de dados, driver, Gestor de Drivers) acrescenta o seu próprio nome. Esta informação ajuda a identificar a origem do erro. Exemplo: [Microsoft][ODBC SQL Server Driver][SQL Server]

O framework interpreta a cadeia de erro e coloca os seus componentes em m_strStateNativeOrigin; se m_strStateNativeOrigin contém informação para mais do que um erro, os erros são separados por novas linhas. A estrutura coloca o texto de erro alfanumérico em m_strError.

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

Example

Do ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Nome da coluna inválido 'ColName'"

Em m_strStateNativeOrigin: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server]"

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

Consulte também

Aula CException
Gráfico de Hierarquia
Classe CDatabase
Classe CRecordset
Classe CFieldExchange
CRecordset::Atualização
CRecordset::D elete
Aula CException