Freigeben über


UpdatePV-Beispiel: Implementiert einen aktualisierbaren OLE DB-Anbieter

Aktualisiert: November 2007

Das UpdatePV-Beispiel ist ein OLE DB-Anbietervorlagenbeispiel, das demonstriert, wie ein aktualisierbarer (Lese/Schreib-) Anbieter implementiert wird. Insbesondere demonstriert dieses Beispiel, wie unmittelbare und verzögerte Einfügungen/Aktualisierungen/Löschvorgänge ausgeführt werden. UpdatePV veranschaulicht außerdem die Verwendung von Schemarowsets (die einigen Assistenten die Interaktion mit einem Anbieter erleichtern). UpdatePV demonstriert ebenso wie MyProv die IRowsetLocateImpl-Klasse.

Im AdvancedPV-Beispiel finden Sie Demonstrationen weiterer Techniken zum Laden und Speichern von Daten mithilfe eines Anbieters.

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

Um die Features des Beispiels kennen zu lernen, erstellen Sie ein Consumerprojekt mit einem Accessor für den Anbieter und eine Konsolenanwendung, um auf die Daten zugreifen zu können und sie ausgeben zu können.

So erstellen Sie dieses Beispiel und führen es aus

  1. Öffnen Sie die Projektmappendatei UpdatePV.sln.

  2. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  3. Erstellen Sie ein Consumerprojekt mit dem ATL-Projekt-Assistenten (als attributierte DLL-Datei).

  4. Fügen Sie dem Consumerprojekt einen OLE DB-Consumer hinzu. (Wählen Sie aus dem Dialogfeld Klasse hinzufügen die Option ATL-OLE DB-Consumer.)

  5. 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 UpProv-OLE-DB. (Der UpProv-Anbieter sollte automatisch registriert werden, wenn Sie UpdatePV erstellen. Wenn er hier nicht aufgelistet ist, führen Sie die Datei regsvr32.exe für die Datei UpdatePV.dll aus.)

  6. Klicken Sie auf Next, um zur Registerkarte Verbindung zu wechseln. Vergewissern Sie sich, dass unter Geben Sie den zu verwendenden Anfangskatalog ein der Pfadname zur Datei MyData.txt korrekt ist.

  7. Klicken Sie auf OK. Das Dialogfeld Datenbankobjekt auswählen wird angezeigt. Öffnen Sie das Objekt Tabellen. Es steht nur ein Element zur Verfügung: der Pfadname für die Datei MyData.txt. Wählen Sie ihn aus, und klicken Sie auf OK. Sie kehren zum ATL-OLE DB-Consumer-Assistenten zurück.

  8. Wählen Sie im ATL-OLE DB-Consumer-Assistenten die Option Tabelle, geben Sie der Klasse (falls notwendig) einen kürzeren Namen, z. B. CMyCons, und klicken Sie auf Fertig stellen.

  9. Schließen Sie die Sicherheitswarnung, die angezeigt wird, wenn Sie auf OK klicken.

  10. Entfernen Sie diese Zeile aus CMyCons.h:

    #error Security Issue: The connection string may contain a password
    

    Diese Zeile verhindert die Kompilierung. Sie wurde eingefügt, um Sie auf die Tatsache hinzuweisen, dass (unter realen Bedingungen) vertrauliche Informationen geschützt werden sollten.

  11. Erstellen Sie das Consumerprojekt, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten des Projekts und dann auf Erstellen klicken.

  12. Erstellen Sie eine neue Konsolenanwendung. Schließen Sie in der CPP-Datei den Consumerheader ein, und ändern Sie den Code wie folgt:

    #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;
    }
    
  13. 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 Konsolenanwendung in der Entwicklungsumgebung aus, indem Sie auf die Schaltfläche Start klicken. Es sollten fünf Spalten mit Text angezeigt werden (eine Index- und vier Textspalten).

So funktioniert das Beispiel

UpdatePV baut auf den C-Laufzeitdatei- und E/A-Funktionen auf. Es handelt sich dabei um einen Datenspeicher. Genau genommen wandelt das Beispiel eine aus einem Datenelementpaar bestehende Textdatei in ein Rowset um. Zusammen mit dem Beispiel erhalten Sie die Textdatei MyData.txt, die Datenelementpaare enthält. Sie können dieses Beispiel jedoch bei jeder beliebigen Textdatei ausführen (es wandelt einfach alles in Zwei-Wort-Tupels um).

UpdatePV führt die Leseoperationen mithilfe von RUpdateRowset::Execute (rowset.h) aus. Die Schreiboperationen werden mithilfe von RUpdateRowset::FlushData (rowset.h) ausgeführt. Diese Funktionen werden von den OLE DB-Anbietervorlagen im Rahmen der normalen Anbieteroperationen aufgerufen. Das Beispiel verwendet die OLE DB-Anbietervorlagenklassen IRowsetChangeImpl und IRowsetUpdateImpl. Die IRowsetChangeImpl-Klasse bietet Unterstützung für unmittelbare Einfügungen/Aktualisierungen/Löschvorgänge. Die IRowsetUpdateImpl-Klasse bietet Unterstützung für verzögerte Einfügungen/Aktualisierungen/Löschvorgänge. Die IRowsetUpdateImpl-Klasse erbt von der IRowsetChangeImpl-Klasse. Weitere Informationen zum Abrufen/Einrichten von Daten finden Sie unter Erstellen eines aktualisierbaren Anbieters in der Visual C++-Dokumentation sowie unter Updating Data in Rowsets im Handbuch OLE DB Programmer's Reference der Windows SDK-Dokumentation.

Schemarowsets werden auch von UpdatePV unterstützt. Mit diesen Schemarowsets können Consumer Informationen zu einem Anbieter erhalten, ohne ein Rowset zu öffnen oder einen Befehl auszuführen. Die Visual C++-Assistenten verwenden Schemarowsets zum Generieren von Clientaccessoren. Die wichtigsten Funktionen sind CUpdateSessionTRSchemaRowset::Execute, CUpdateSessionColSchemaRowset::Execute und CUpdateSessionPTSchemaRowset::Execute. Alle drei Funktionen informieren über die Spalten und Datentypen in den Tabellen und geben an, welche Tabellen vom Anbieter unterstützt werden. Weitere Informationen zu Schemarowsets finden Sie in der Beschreibung der IDBSchemaRowset-Schnittstelle im Handbuch OLE DB Programmer's Reference (nur auf Englisch verfügbar).

Schlüsselwörter

Dieses Beispiel demonstriert die folgenden Schnittstellen:

IRowsetChange, IRowsetUpdateImpl

Dieses Beispiel demonstriert die folgenden Eigenschaften:

DBPROP_IRowsetChange, DBPROP_IRowsetUpdate

Siehe auch

Weitere Ressourcen

ATL-Beispiele