Erstellen eines Consumers ohne Assistent
Im folgenden Beispiel wird davon ausgegangen, dass Sie einem bestehenden ATL-Projekt OLE DB-Consumerunterstützung hinzufügen. Wenn Sie OLE DB-Consumerunterstützung zu einer MFC-Anwendung hinzufügen möchten, sollten Sie den MFC-Anwendungs-Assistenten ausführen. Er erstellt die benötigte Unterstützung und ruft die zur Ausführung der Anwendung notwendigen MFC-Routinen auf.
So fügen Sie OLE DB-Consumerunterstützung ohne Verwendung des ATL-OLE DB-Consumer-Assistenten hinzu:
Fügen Sie in der Datei stdafx.h die folgenden #include-Anweisungen an:
#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
Programmtechnisch führt ein Consumer in der Regel die folgende Operationsabfolge aus:
Erstellen einer Benutzerdatensatz-Klasse, die Spalten an lokale Variablen bindet. In diesem Beispiel ist CMyTableNameAccessor die Benutzerdatensatzklasse (siehe Benutzerdatensätze). Diese Klasse enthält die Spaltenzuordnung und die Parameterzuordnung. Deklarieren Sie in der Benutzerdatensatz-Klasse einen Datenmember für jedes in der Spaltenzuordnung festgelegte Feld. Deklarieren Sie außerdem für jeden dieser Datenmember einen Statusdatenmember und einen Längendatenmember. Weitere Informationen finden Sie unter Feldstatus-Datenmember in vom Assistenten generierten Accessoren.
Tipp
Wenn Sie einen eigenen Consumer schreiben, müssen die Datenvariablen vor den Status- und Längenvariablen stehen.
Instanziieren einer Datenquelle und einer Sitzung. Entscheiden Sie, welcher Accessor- und Rowsettyp verwendet wird, und instanziieren Sie dann ein Rowset mit CCommand oder CTable:
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor> >
Aufrufen von CoInitialize zum Initialisieren von COM. Dies erfolgt üblicherweise im Hauptcode. Beispiel:
HRESULT hr = CoInitialize(NULL);
Aufrufen von CDataSource::Open oder einer Variation davon.
Öffnen einer Verbindung zur Datenquelle, Öffnen der Sitzung und Öffnen und Initalisieren des Rowsets (bei einem Befehl auch Ausführen dieses Befehls):
hr = ds.Open(); hr = ss.Open(ds); hr = rs.Open(); // (Open also executes the command)
Optional Festlegen von Rowseteigenschaften mit CDBPropSet::AddProperty und Übergeben dieser Eigenschaften als Parameter an rs.Open. Ein Beispiel zur Vorgehensweise finden Sie unter GetRowsetProperties im Thema Vom Consumer-Assistenten generierte Methoden.
Sie können nun das Rowset zum Abrufen/Bearbeiten der Daten verwenden.
Schließen Sie nach Fertigstellung der Anwendung die Verbindung, die Sitzung und das Rowset:
rs.Close(); ss.Close(); ds.Close();
Wenn Sie einen Befehl verwenden, empfiehlt es sich, ReleaseCommand nach Close aufzurufen. Im Codebeispiel unter CCommand::Close wird gezeigt, wie Close und ReleaseCommand aufgerufen werden.
Aufrufen von CoUnInitialize, um COM nicht zu initialisieren. Dies erfolgt üblicherweise im Hauptcode.
CoUninitialize();