Condividi tramite


TN055: Eseguire la migrazione di applicazioni di classi di database ODBC MFC alle classi DAO MFC

[!NOTA]

A partire da Visual C++ .NET, l'ambiente e le procedure guidate di Visual C++ non supportano più DAO, anche se le classi DAO sono incluse e possono essere comunque utilizzate.Si consiglia di utilizzare Modelli OLE DB o ODBC e MFC per i nuovi progetti.di utilizzare DAO solo per la gestione delle applicazioni già esistenti.

Panoramica

In molte situazioni può essere opportuno eseguire la migrazione di applicazioni che utilizzano le classi di database ODBC MFC alle classi di database DAO di MFC.Questa nota tecnica verrà illustrata in dettaglio la maggior parte delle differenze tra ODBC MFC e le classi DAO.Con le differenze in pertanto, non deve essere troppo difficile la migrazione delle applicazioni dalle classi ODBC alle classi MFC se necessario.

Poiché la migrazione dall'ODBC a DAO?

Esistono numerosi motivi per cui si desidera eseguire la migrazione delle applicazioni da classi di database ODBC alle classi di database DAO, ma la decisione non è necessariamente semplice o ovvia.È necessario tenere presente che il modulo di gestione di database Microsoft Jet utilizzato da DAO possibile leggere qualsiasi origine dati ODBC per il quale si dispone di un driver ODBC.Può essere più efficiente utilizzare le classi di database ODBC o da chiamare direttamente ODBC direttamente, ma il modulo di gestione di database Microsoft Jet è in grado di leggere i dati ODBC.

Alcuni casi semplici che accettano la decisione di ODBC/DAO semplice.Formato di Excel, il formato di accesso (direttamente indicare possibile il motore di Microsoft Jet che in un formato di accesso ai dati necessari solo quando, ad esempio, e così via) la scelta più è utilizzare le classi di database DAO.

I casi più complessi si verificano quando i dati presenti in un server o in diversi server diversi.In questo caso, la decisione di utilizzare il database ODBC le classi o le classi di database DAO è difficile.Se si desidera eseguire operazioni come join eterogenei (dati di join dai server in più formati come SQL Server e Oracle), il motore di gestione di database Microsoft Jet esegue il join automaticamente anziché richiedere per eseguire il lavoro necessario caso di utilizzo delle classi di database ODBC o denominata ODBC direttamente.Se si utilizza un driver ODBC che supporta i cursori del driver, la scelta migliore potrebbe essere le classi di database ODBC.

La scelta può essere complicato, pertanto si consiglia di scrivere un codice di esempio per verificare le prestazioni di vari metodi forniti dalle esigenze speciali.Questa nota tecnica si presuppone che l'utente abbia avuto luogo la decisione di eseguire la migrazione da classi di database ODBC alle classi di database DAO.

Analogie tra le classi delle classi di database ODBC e del database DAO MFC

La progettazione originale le classi ODBC MFC è stata basata sul modello a oggetti di DAO utilizzato in Microsoft Access e Microsoft Visual Basic.Ciò significa che sono disponibili molte funzionalità comuni delle classi DAO e ODBC MFC, che tutti non verranno elencate in questa sezione.i modelli di programmazione sono generalmente gli stessi.

Per evidenziare alcune somiglianze:

  • Sia ODBC che le classi DAO presentano oggetti di database che gestiscono tramite il sistema di gestione di database sottostante (DBMS).

  • Entrambi sono oggetti recordset che rappresentano un gruppo di risultati restituiti dal DBMS.

  • Il database DAO e gli oggetti recordset dispongono di membri quasi identici alle classi ODBC.

  • Con entrambi i set di classi, il codice per recuperare i dati è identico a eccezione di alcune modifiche ai nomi dei membri e dell'oggetto.Le modifiche verranno richieste, ma in genere il processo è un semplice modifica del nome quando passano dalle classi ODBC alle classi DAO.

Ad esempio, in sia modella la procedura per recuperare i dati consiste nel creare e aprire un oggetto di database, creare e aprire un oggetto recordset e passare ossia) sebbene i dati che eseguono alcune operazioni.

Differenze tra le classi DAO e ODBC MFC

Le classi DAO include più oggetti e un set più dettagliato di metodi, ma questa sezione verrà illustrata in dettaglio solo le differenze nelle simili classi e funzionalità.

Probabilmente le differenze più comuni tra le classi sono le modifiche di nomi per simili classi e le funzioni globali.Nell'elenco seguente sono indicate le modifiche di nomi degli oggetti, i metodi e le funzioni globali associati alle classi di database:

Classe o funzione

Equivalente nelle classi DAO MFC

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 (COleDateTimebase)

RFX_Text

DFX_Text

RFX_Binary

DFX_Binary

RFX_LongBinary

DFX_LongBinary

* La funzione di RFX_Date è basata su CTime e su TIMESTAMP_STRUCT.

Modifiche essenziali a funzionalità che può interessare l'applicazione e richiede di ulteriori modifiche al nome semplici sono elencati in.

  • Costanti e macro utilizzate per specificare informazioni quali il recordset aprono il tipo e le opzioni disponibili di recordset sono state modificate.

    Con le classi ODBC MFC necessario per definire queste opzioni tramite le macro o i tipi enumerati.

    Con le classi DAO, DAO fornisce la definizione di queste opzioni in un file di intestazione (DBDAOINT.H).Pertanto il tipo di recordset è un membro enumerato di CRecordset, ma con DAO è una costante anziché.Se ad esempio si utilizza snapshot quando specifica il tipo di CRecordset in ODBC ma in DB_OPEN_SNAPSHOT quando specifica il tipo di CDaoRecordset.

  • Il tipo predefinito di recordset per CRecordset è snapshot mentre il tipo predefinito di recordset per CDaoRecordset è dynaset (vedere la nota riportata di seguito per un problema aggiuntive sugli snapshot della classe ODBC).

  • La classe ODBC CRecordset include un'opzione per creare un tipo forward-only del recordset.Nella classe di CDaoRecordset , forward-only è un tipo non di recordset, ma una proprietà (o opzione) di determinati tipi di recordset.

  • Un recordset solo quando aprire un oggetto di CRecordset è opportuno che i dati del recordset possono essere letti e aggiunti.Con l'oggetto di CDaoRecordset , l'opzione solo significa letteralmente che i dati del recordset possono essere aggiunti solo (e non lettura).

  • Le funzioni membro della transazione delle classi ODBC sono membri di CDatabase e operano a livello di database.Nelle classi DAO, le funzioni membro delle transazioni sono membri di una classe di livello superiore (CDaoWorkspace) e possono influire su pertanto più oggetti di CDaoDatabase che condividono la stessa area di lavoro (spazio di transazione).

  • La classe di eccezione è stata modificata.CDBExceptions viene generato nelle classi e in CDaoExceptions ODBC nelle classi DAO.

  • RFX_Date utilizza CTime e gli oggetti di TIMESTAMP_STRUCT mentre DFX_Date utilizza COleDateTime.COleDateTime è quasi identico a CTime, ma è basato 8 in un byte OLE DATE anziché 4 byte singolo time_t pertanto possibile utilizzare un intervallo più grande dei dati.

    [!NOTA]

    Gli snapshot di DAO (CDaoRecordset) sono di sola lettura mentre gli snapshot ODBC (CRecordset) possono essere aggiornabili in base al driver e l'utilizzo della libreria di cursori ODBC.Se si utilizza la libreria di cursori, gli snapshot di CRecordset sono aggiornabili.Se si utilizza uno dei driver per Microsoft dal pacchetto desktop 3,0 del driver senza la libreria di cursori ODBC, gli snapshot di CRecordset sono di sola lettura.Se si utilizza un altro driver, consultare la documentazione del driver per verificare se gli snapshot (STATIC_CURSORS) sono di sola lettura.

Vedere anche

Altre risorse

Note tecniche del numero

Note tecniche per categoria