AdvancedPV-Beispiel: Demonstriert erweiterte Anbietertechniken
Aktualisiert: November 2007
Das AdvancedPV-Beispiel ist dem UpdatePV-Beispiel sehr ähnlich, veranschaulicht jedoch einige erweiterte Techniken.
In der Regel verwenden Anbieter, die mit OLE DB-Vorlagen geschrieben wurden, CAtlArray zum Speichern der Daten. Die OLE DB-Anbietervorlagen rufen eine vom Benutzer bereitgestellte Execute-Methode auf, um das Array zu füllen (z. B. um alle Zeilen aus der Datendatei in das Array zu laden). Zum Speichern des Arrayinhalts wird eine andere vom Benutzer bereitgestellte Methode verwendet: FlushData (um z. B. den Inhalt des Arrays wieder in die Datendatei zu schreiben). Das Problem dabei ist, dass in Execute alle Zeilen im Rowset geladen werden müssen und in FlushData alle Zeilen wiederum gleichzeitig gespeichert werden müssen. Wenn das Rowset eine große Anzahl an Zeilen enthält, müssen alle Daten (im CAtlArray-Objekt) gespeichert werden.
AdvancedPV zeigt, wie anstatt des standardmäßigen CAtlArray-Arrays eine spezielle Array-Klasse verwendet wird, damit der Anbieter Zeilen nach Bedarf lädt und speichert. Die Zeilen werden nur von der Datendatei geladen, wenn sie angefordert werden (mithilfe eines speziell implementierten operator[]), und die Änderungen werden erneut in die Datei geschrieben, sobald sich der Inhalt des Arrays ändert.
Sicherheitshinweis: |
---|
Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.
Weitere Informationen finden Sie unter Suchen von Beispieldateien.
Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.
Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.
Erstellen und Ausführen des Beispiels
So erstellen Sie dieses Beispiel und führen es aus
Öffnen Sie die Projektmappe AdvancedPV.sln.
Klicken Sie im Menü Erstellen auf die Option Erstellen.
Erstellen Sie mithilfe des Win32-Projekt-Assistenten eine Win32-Konsolenanwendung. Fügen Sie die ATL-Unterstützung hinzu.
Fügen Sie dem Projekt einen OLE DB-Consumer hinzu. (Wählen Sie aus dem Dialogfeld Klasse hinzufügen die Option ATL-OLE DB-Consumer.)
Klicken Sie im ATL-OLE DB-Consumer-Assistenten auf die Schaltfläche Datenquelle, und wählen Sie im Dialogfeld Eigenschaften von Datenverknüpfung den Anbieter AdvancedProv. (Der AdvancedProv-Anbieter wird in der Regel automatisch registriert, wenn Sie AdvancedPV erstellen. Wenn er hier nicht aufgelistet ist, führen Sie die Datei regsvr32.exe für die Datei AdvancedPV.dll aus.)
Klicken Sie auf Next, um zur Registerkarte Verbindung zu wechseln. Geben Sie dann unter Geben Sie den zu verwendenden Anfangskatalog ein den zu verwendenden Anfangskatalog ein (der Pfad zur Datei DataFile.dat).
Öffnen Sie unter Datenbankobjekt auswählen das Objekt Tabellen. Es steht nur ein Element zur Verfügung (der Pfad zur Datei DataFile.dat). Wählen Sie es aus, und klicken Sie auf OK. Wenn Sie zum ATL-OLE DB-Consumer-Assistenten zurückkehren, wählen Sie die Option Tabelle, geben Sie der Klasse (falls notwendig) einen kürzeren Namen, z. B. CMyCons, und klicken Sie auf Fertig stellen. Erstellen Sie das Consumer-Projekt.
Fügen Sie dem Hauptcode des Projekts Folgendes hinzu:
#include "MyCons.h" int main( int argc, char* argv[] ) { // Add this code HRESULT hr = CoInitialize(NULL); CMyCons rs; hr = rs.OpenAll(); ATLASSERT( SUCCEEDED(hr)); hr = rs.MoveFirst(); while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) { printf( "%d %s %s %s %s\n", rs.m_Fixed, rs.m_Command, rs.m_Text, rs.m_Command2, rs.m_Text2 ); hr = rs.MoveNext(); } rs.CloseAll(); CoUninitialize(); return 0; }
Setzen Sie einen Haltepunkt in die CoUninitialize-Funktion. Dadurch bleibt die Konsole geöffnet, und Sie können sich die Ergebnisse ansehen. Führen Sie die Anwendung aus, indem Sie auf die Schaltfläche Start klicken. (Oder Sie klicken im Menü Debuggen auf Starten ohne Debuggen). Es sollten fünf Spalten mit Text angezeigt werden (eine Index- und vier Textspalten).
Schlüsselwörter
In diesem Beispiel werden die folgenden Schnittstellen verwendet:
IRowsetLocateImpl, IRowsetScroll, IRowsetScrollImpl, IRowsetUpdateImpl, IConnectionPointContainerImpl, IRowsetNotifyCP, IDBCreateSessionImpl, IDBInitializeImpl, IDBPropertiesImpl, IPersistImpl, IInternalConnectionImpl, IGetDataSourceImpl, IOpenRowsetImpl, ISessionPropertiesImpl, IObjectWithSiteSessionImpl, IDBSchemaRowsetImpl, IDBCreateCommandImpl, IAccessorImpl, ICommandTextImpl, ICommandPropertiesImpl, IObjectWithSiteImpl, IConvertTypeImpl, IColumnsInfoImpl, IInternalCommandConnectionImpl
Das Beispiel demonstriert die Verwendung der folgenden Klassen:
CSchemaRowsetImpl, CComObjectRootEx, CComObjectRootEx, CRowsetImpl, CFileArray, CSimpleRow
Dieses Beispiel demonstriert die folgenden Makros:
COM_INTERFACE_ENTRY, PROPERTY_INFO_ENTRY