Esempio UpdatePV: implementazione di un provider OLE DB aggiornabile
Aggiornamento: novembre 2007
L'esempio UpdatePV rappresenta un esempio dei modelli di provider OLE DB in cui viene illustrata l'implementazione di un provider aggiornabile di lettura e scrittura. In particolare, descrive come eseguire operazioni immediate e rinviate di inserimento, aggiornamento ed eliminazione. In UpdatePV viene inoltre illustrato l'utilizzo dei rowset dello schema, che semplificano l'interazione tra alcune procedure guidate e un provider. UpdatePV dimostra inoltre la classe IRowsetLocateImpl, così come MyProv.
Per una descrizione delle tecniche aggiuntive di caricamento e salvataggio dei dati con un provider, vedere Esempio AdvancedPV.
![]() |
---|
Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti. |
Per ottenere gli esempi e le istruzioni per l'installazione:
In Visual Studio scegliere Esempi dal menu ?.
Per ulteriori informazioni, vedere Individuazione dei file di esempio.
La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.
È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.
Generazione ed esecuzione dell'esempio
Per ottenere una dimostrazione delle funzionalità progettate per questo esempio, generare l'esempio, creare un progetto consumer con una funzione di accesso per il provider e quindi creare un'applicazione console per l'accesso e la restituzione dei dati.
Per generare ed eseguire l'esempio
Aprire il file di soluzione UpdatePV.sln.
Scegliere Genera soluzione dal menu Genera.
Creare un progetto consumer con la Creazione guidata progetto ATL. Eseguirne la creazione come DLL con attributi.
Aggiungere un consumer OLE DB al progetto consumer selezionando Consumer OLE DB ATL da Aggiungi classe.
Nella Creazione guidata consumer OLE DB ATL scegliere Origine dati, quindi selezionare UpProv OLE DB Provider nella finestra delle proprietà Data Link. Il provider UpProv dovrebbe essere registrato automaticamente al momento della generazione di UpdatePV. Se non è elencato tra le opzioni, eseguire regsvr32.exe su UpdatePV.dll.
Scegliere Next per passare alla scheda Connessione, quindi assicurarsi che il nome del percorso di MyData.txt riportato in Enter the initial catalog to use sia corretto.
Scegliere OK. Aprire Tabelle nella finestra di dialogo Seleziona oggetto di database. Verrà visualizzata un'unica voce, costituita dal nome del percorso di MyData.txt. Selezionarlo e scegliere OK. Verrà nuovamente visualizzata la Creazione guidata consumer OLE DB ATL.
Nella Creazione guidata consumer OLE DB ATL selezionare Tabella, rinominare la classe assegnando eventualmente un nome più breve, ad esempio CMyCons, quindi scegliere Fine.
Per chiudere la finestra di dialogo Avviso di protezione, scegliere OK.
Rimuovere questa riga da CMyCons.h:
#error Security Issue: The connection string may contain a password
Questa riga consente di impedire la compilazione, ma viene inserita per avvertire l'utente, in scenari reali, che è necessario proteggere le informazioni riservate.
Per generare il progetto consumer, fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliere Genera.
Creare una nuova applicazione console. Nel file CPP includere l'intestazione del consumer e modificare il codice nel modo seguente:
#include "stdafx.h" #include <atldbcli.h> #include "..\consumer\cmycons.h" int _tmain(int argc, _TCHAR* argv[]) { HRESULT hr = CoInitialize(NULL); CMyCons c; hr = c.OpenAll(); ATLASSERT( SUCCEEDED( hr ) ); hr = c.MoveFirst(); while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) { printf( "%d %s %s %s %s\n", c.m_Fixed, c.m_Command, c.m_Text, c.m_Command2, c.m_Text2 ); hr = c.MoveNext(); } c.CloseAll(); CoUninitialize(); return 0; }
Impostare un punto di interruzione sulla funzione CoUninitialize. La console resterà aperta consentendo la visualizzazione dei risultati. Eseguire l'applicazione console dall'ambiente di sviluppo scegliendo Avvia. Verranno stampate cinque colonne di testo, ovvero una colonna di indice e quattro colonne di testo.
Funzionamento dell'esempio
UpdatePV viene generato sulla base delle funzioni di I/O e di gestione file del linguaggio C e rappresenta un archivio dati. In particolare, nell'esempio viene utilizzato un file di testo costituito da una coppia di elementi di dati, che viene convertito in un rowset. L'esempio viene fornito con un file di testo MyData.txt contenente coppie di elementi di dati, ma può essere eseguito su qualsiasi file di testo, poiché analizza semplicemente tutti i dati in tuple di due parole.
UpdatePV esegue le operazioni di lettura mediante RUpdateRowset::Execute (rowset.h), mentre le operazioni di scrittura vengono gestite con RUpdateRowset::FlushData (rowset.h). Queste funzioni vengono chiamate dai modelli di provider OLE DB nell'ambito del normale funzionamento del provider. Nell'esempio vengono utilizzate le classi IRowsetChangeImpl e IRowsetUpdateImpl dei modelli di provider OLE DB. La classe IRowsetChangeImpl fornisce il supporto per le operazioni di inserimento, aggiornamento ed eliminazione immediate. La classe IRowsetUpdateImpl supporta le operazioni di inserimento, aggiornamento ed eliminazione rinviate. La classe IRowsetUpdateImpl eredita da IRowsetChangeImpl. Per ulteriori informazioni sul recupero e l'impostazione dei dati, leggere Creazione di un provider aggiornabile nella documentazione relativa a Visual C++ e Aggiornamento dati nei set di righe in OLE DB Programmer's Reference, nell'ambito della documentazione di Windows SDK.
UpdatePV fornisce inoltre il supporto di rowset dello schema, che consentono ai consumer di reperire le informazioni su un provider senza aprire un rowset o eseguire un comando. Le procedure guidate Visual C++ utilizzano i rowset dello schema per generare funzioni di accesso sul lato client. Le funzioni principali sono rappresentate da CUpdateSessionTRSchemaRowset::Execute, CUpdateSessionColSchemaRowset::Execute e CUpdateSessionPTSchemaRowset::Execute. Tutte le tre funzioni restituiscono informazioni sulle tabelle supportate dal provider e sulle colonne e sui tipi di dati inclusi nelle tabelle. Per ulteriori informazioni sui rowset dello schema, vedere l'interfaccia IDBSchemaRowset in OLE DB Programmer's Reference.
Parole chiave
Nell'esempio vengono illustrate le seguenti interfacce:
IRowsetChange, IRowsetUpdateImpl
Nell'esempio vengono illustrate le seguenti proprietà:
DBPROP_IRowsetChange, DBPROP_IRowsetUpdate