TN055: Migrando aplicativos de classe de banco de dados ODBC do MFC para classes MFC DAO

Observação:

sistema autônomo do Visual C++. NET, o ambiente do Visual C++ e sistema autônomo assistentes não suportam mais DAO (Embora sistema autônomo classes DAO estão incluídas e você ainda poderá usá-las).A Microsoft recomenda que você use Modelos de BD OLE DB or ODBC e do MFC para novos projetos.Você só deve usar o DAO em manutenção de aplicativos existentes.

Visão Geral

Em muitas situações, talvez seja desejável para migrar aplicativos que usam as classes de banco de dados ODBC do MFC para classes de banco de dados DAO do MFC.Esta nota técnica detalharemos a maioria das diferenças entre as classes do MFC ODBC e o DAO.Com as diferenças em mente, ele não deve ser excessivamente difícil migrar aplicativos de classes ODBC para as classes MFC se desejado.

Por que migrar do ODBC para o DAO?

Há várias razões por que talvez queira migrar aplicativos de classes banco de dados ODBC para as classes de banco de dados DAO, mas a decisão de não é necessariamente óbvias ou simples.Uma coisa a se ter em mente é que o mecanismo de banco de dados Microsoft Jet é usado pelo DAO pode ler qualquer fonte de dados ODBC para os quais você tem um driver ODBC.Talvez seja mais eficiente usar as classes de banco de dados ODBC ou telefonar ODBC diretamente por você, mas o mecanismo de banco de dados Microsoft Jet pode ler dados ODBC.

Alguns casos simples tomar a decisão de ODBC/DAO fácil.Por exemplo, quando precisa apenas de acesso a dados em um formato que o mecanismo Microsoft Jet pode ler diretamente (formato do Access, formato do Excel e assim por diante) a opção óbvia é usar as classes de banco de dados DAO.

Casos mais complexos surgem quando seus dados existem em um servidor ou em vários servidores diferentes.Nesse caso, que a decisão de usar as classes de banco de dados ODBC ou as classes de banco de dados DAO é difícil.Se você deseja fazer coisas como associações heterogêneas (unir de dados de servidores em vários formatos, como SQL servidor e Oracle) e, em seguida, o mecanismo de banco de dados Microsoft Jet executará a unir para você em vez de forçá-lo a fazer o trabalho necessário se você utilizou as classes de banco de dados ODBC ou chamada ODBC diretamente.Se você estiver usando um driver ODBC que oferece suporte a cursores do driver, a melhor opção talvez as classes de banco de dados ODBC.

A opção pode ser complicada, portanto, talvez você queira escrever um código de exemplo para testar o desempenho de vários métodos, dadas as necessidades especiais.Esta nota técnica presume que você fez a decisão de migrar o banco de dados de ODBC para as classes de banco de dados DAO.

Semelhanças entre classes de banco de dados ODBC e classes de banco de dados DAO MFC

O design original das classes MFC ODBC foi baseado em modelo de objeto do DAO tenha sido usado no Microsoft acesso e Microsoft Visual Basic.Isso significa que há muitos recursos comuns de classes do ODBC e DAO MFC, nem todos serão listados nesta seção.Em geral, os modelos de programação são os mesmos.

Para realçar algumas semelhanças:

  • O ODBC e o DAO classes ter objetos de banco de dados que gerencia usando o sistema de gerenciamento de banco de dados (DBMS) subjacente.

  • Ambos têm objetos de conjunto de registros que representa um conjunto de resultados retornado por esse DBMS.

  • Os objetos de banco de dados e conjunto de registros DAO têm membros praticamente idênticos às classes de ODBC.

  • Com os dois conjuntos de classes, o código para recuperar dados é idêntico, exceto para algumas alterações de nome de objeto e membro.As alterações serão necessárias, mas geralmente o processo é uma alterar de nome simples quando se alterna com as classes ODBC para classes do DAO.

Por exemplo, em ambos os modelos o procedimento para recuperar dados é criar e em em aberto um objeto de banco de dados, criar e em em aberto um objeto de conjunto de registros e navegar (mover) embora os dados executando alguma operação.

Diferenças entre classes MFC DAO e ODBC

As classes DAO incluem mais objetos e um conjunto mais rico de métodos, mas esta seção explicará em detalhes somente as diferenças nas classes semelhantes e funcionalidade.

Provavelmente as diferenças mais óbvias entre as classes são as alterações de nome para classes semelhantes e funções global.A lista a seguir mostra as alterações de nome de objetos, métodos e funções global associadas com as classes de banco de dados:

Função ou classe

Equivalente nas classes MFC DAO

CDatabase

CDaoDatabase

CDatabase::ExecuteSQL

CDaoDatabase::Execute

CRecordset

CDaoRecordset

CRecordset::GetDefaultConnect

CDaoRecordset::GetDefaultDBName

CFieldExchange

CDaoFieldExchange

RFX_Bool

DFX_Bool

RFX_Byte

DFX_Byte

RFX_Int

DFX_Short

RFX_Long

DFX_Long

 

DFX_Currency

RFX_Single

DFX_Single

RFX_Double

DFX_Double

RFX_Date *

DFX_Date (COleDateTime-com base)

RFX_Text

DFX_Text

RFX_Binary

DFX_Binary

RFX_LongBinary

DFX_LongBinary

*    The RFX_Date função se baseia CTime e TIMESTAMP_STRUCT.

As principais mudanças na funcionalidade que podem afetar seu aplicativo e requerer alterações de nome mais simples estão listadas abaixo.

  • Constantes e macros utilizadas para especificar itens como conjunto de registros em em aberto tipo e conjunto de registros, abra opções foram alteradas.

    Com as classes ODBC MFC necessárias para definir essas opções por meio de macros ou tipos enumerados.

    Com as classes do DAO, o DAO fornece a definição dessas opções em um arquivo de cabeçalho (DBDAOINT.H).Assim, o tipo de conjunto de registros é um membro enumerado de CRecordset, mas com o DAO é uma constante em vez disso. Por exemplo, você usaria instantâneo ao especificar o tipo de CRecordset em ODBC, mas DB_OPEN_SNAPSHOT ao especificar o tipo de CDaoRecordset.

  • O tipo de conjunto de registros padrão de CRecordset é instantâneo enquanto o tipo de conjunto de registros padrão de CDaoRecordset é tipo dynaset (consulte a observação abaixo de um problema adicional sobre instantâneos de classe do ODBC).

  • O ODBC CRecordset classe possui uma opção para criar um tipo de conjunto de registros somente de encaminhar. No CDaoRecordset classe somente de encaminhar não é um tipo de conjunto de registros, mas em vez disso, uma propriedade (ou opção) de certos tipos de conjuntos de registros.

  • Um recordset somente acrescentar ao abrir um CRecordset objeto significava que dados do conjunto de registros podem ser lido e acrescentados. Com CDaoRecordset o objeto, a opção de acrescentar somente literalmente significa que os dados do conjunto de registros só podem ser acrescentados (e não lidas).

  • Funções de membro de transação as classes de ODBC são membros de CDatabase e funcionam no nível do banco de dados. Em classes DAO, as funções de membro de transação são membros de uma classe de nível superior (CDaoWorkspace) e, portanto, pode afetar vários CDaoDatabase objetos de compartilhamento ao mesmo espaço de trabalho (espaço de transação).

  • A classe de exceção foi alterada.CDBExceptions são lançadas nas classes ODBC e CDaoExceptions nas classes DAO.

  • RFX_Date usa CTime e TIMESTAMP_STRUCT objetos de ao mesmo tempoDFX_Date uses COleDateTime. The COleDateTime é quase idêntico CTime, mas se baseia em uma OLE de 8 byte DATA em vez de um de 4 byte time_t Portanto, ele pode armazenar um intervalo muito maior de dados.

    Observação:

    () DAO CDaoRecordset) snapshots são somente leitura ao ODBC ()CRecordset) snapshots podem ser atualizáveis, dependendo do driver e usar o ODBC biblioteca de cursores. Se você estiver usando o cursor biblioteca, CRecordset Os instantâneos são atualizáveis. Se você estiver usando qualquer um dos drivers do Microsoft área de trabalho Driver empacotar 3.0 sem a biblioteca de cursores ODBC, a CRecordset snapshots são somente leitura. Se você estiver usando outro driver, consulte documentação do driver para saber se snapshots (STATIC_CURSORS) são somente leitura.

Consulte também

Outros recursos

Notas técnicas por número

Notas técnicas por categoria