Freigeben über


AdvancedPV-Beispiel: Demonstriert erweiterte Anbietertechniken

Das AdvancedPV-Beispiel ist UpdatePV sehr ähnlich, veranschaulicht einige erweiterten Techniken jedoch.

Normalerweise verwenden Anbieter, die mithilfe von OLE DB-Vorlagen geschrieben CAtlArray für die Speicherung von Daten. OLE DB-Anbietervorlagen rufen eine vom Benutzer bereitgestellte Execute-Methode, um das Array (z. B. um alle Zeilen aus der Datendatei in das Array zu laden) zu füllen. Anderen vom Benutzer bereitgestellte Methode, FlushDatawird verwendet, um speichern Sie den Inhalt des Arrays (z. B. um den Inhalt Array wieder in eine Datendatei zu schreiben) .der Problem mit diesem Ansatz ist, dass in Execute Sie alle Zeilen im Rowset zu laden müssen, und in FlushData Sie alle Zeilen gleichzeitig speichern. Wenn eine große Anzahl von Zeilen im Rowset vorhanden ist, müssen alle Daten (im CAtlArray-Objekt) gespeichert werden.

AdvancedPV veranschaulicht, wie eine spezielle Array-Klasse anstelle des standardmäßigen CAtlArray Arrays verwendet, damit den Provider Zeilen lädt und speichert bei Bedarf. Die Zeilen werden aus der Datendatei geladen, nur, wenn Sie angefordert werden (mithilfe eines speziell implementierten operator[]) und die Änderungen wieder in die Datei geschrieben, werden sobald der Array-Inhalt ändern.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen und in diesem Beispiel führen

  1. Öffnen Sie die Projektmappendatei AdvancedPV.sln.

  2. erstellen Sie Menü, klicken Sie auf erstellen.

  3. Erstellen Sie eine Win32-Konsolenanwendung mit dem Win32-Projekt-Assistenten. Geben Sie ATL-Unterstützung.

  4. Fügen Sie einen OLE DB-Consumer (von Klasse hinzufügen, select ATL-OLE DB-Consumer) zum Projekt hinzu.

  5. Der ATL-OLE DB-Consumer-Assistenten klicken Sie auf die Schaltfläche Datenquelle , und wählen Sie im DatenverknüpfungseigenschaftenAdvancedProv Provider. (Anbieter AdvancedProv sollte automatisch registriert werden, wenn Sie AdvancedPV erstellen, aber wenn Sie nicht sehen Sie hier aufgeführt führen regsvr32.exe auf AdvancedPV.dll.)

  6. Klicken Sie auf Next wechseln zur Registerkarte Verbindung, dann unter geben den Anfangskatalog verwenden, geben Sie den ursprünglichen Katalog mit (den Pfad zu DataFile.dat).

  7. Öffnen Sie unter Datenbankobjekt auswählen Tabellen;Es gibt nur ein Element (der Pfad zu DataFile.dat). Wählen Sie es und klicken Sie auf OK. Beim zurückkehren zu den ATL-OLE DB Consumer-Assistenten, wählen Tabelle, benennen Sie die Klasse etwas kürzer (falls erforderlich), z. B. CMyCons, und klicken Sie auf Ende. Erstellen Sie das Consumerprojekt.

  8. Fügen Sie Folgendes zu Hauptcode des Projekts:

                                #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;
    }
    
  9. Setzen Sie einen Haltepunkt in der CoUninitialize-FunktionDadurch wird die Konsole geöffnet bleiben, so dass Sie die Ergebnisse anzeigen können. Führen Sie die Anwendung, indem Sie auf die Schaltfläche Start (oder klicken Sie auf Menü Debug Starten ohne Debuggen). Es sollten fünf Spalten mit Text ausgedruckt (eine Index- und vier Textspalten) angezeigt werden.

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

Dieses Beispiel demonstriert die folgenden Klassen:

CSchemaRowsetImpl, CComObjectRootEx, CComObjectRootEx, CRowsetImpl, CFileArray, CSimpleRow

Dieses Beispiel demonstriert die folgenden Makros:

COM_INTERFACE_ENTRY , PROPERTY_INFO_ENTRY

Siehe auch

Weitere Ressourcen

ATL-Beispiele