Erstellen eines Consumers ohne Assistent
Im folgenden Beispiel wird vorausgesetzt, dass Sie OLE DB-Consumerunterstützung einem vorhandenen ATL-Projekt hinzufügen. Wenn Sie einer MFC-Anwendung OLE DB-Consumerunterstützung hinzufügen möchten, sollten Sie den MFS-Anwendungsassistenten ausführen, der für alle erforderliche Unterstützung sorgt und MFC-Routinen aufruft, die zum Ausführen der Anwendung erforderlich sind.
So fügen Sie OLE DB-Consumerunterstützung ohne Verwendung des ATL-OLE DB-Consumer-Assistenten hinzu:
Fügen Sie in der Datei "pch.h " die folgenden
#include
Anweisungen an:#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
Programmgesteuert führt ein Consumer in der Regel die folgende Sequenz von Vorgängen aus:
Erstellen Sie eine Benutzerdatensatzklasse, die Spalten an lokale Variablen bindet. In diesem Beispiel ist
CMyTableNameAccessor
die Benutzerdatensatzklasse (siehe Benutzerdatensätze). Diese Klasse enthält die Spalten- und Parameterzuordnung. Deklarieren Sie in der Benutzerdatensatzklasse für jedes Feld, das Sie in der Spaltenzuordnung angeben, einen Datenmember; deklarieren Sie auch für jeden dieser Datenmember einen Statusdatenmember und einen Längendatenmember. Weitere Informationen finden Sie unter Feldstatus-Datenmember in vom Assistenten generierten Accessoren.Hinweis
Wenn Sie einen eigenen Consumer erstellen, müssen die Datenvariablen in der Reihenfolge vor den Status- und Längenvariablen liegen.
Instanziieren Sie eine Datenquelle und eine Sitzung. Entscheiden Sie, welcher Accessor- und Rowsettyp verwendet werden soll, und instanziieren Sie dann ein Rowset mit CCommand oder CTable:
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor>>
Rufen Sie
CoInitialize
zur COM-Initialisierung auf. Dies wird im Hauptcode aufgerufen. Zum Beispiel:HRESULT hr = CoInitialize(NULL);
Rufen Sie CDataSource::Open oder eine seine Varianten auf.
Öffnen Sie eine Verbindung mit der Datenquelle, öffnen Sie die Sitzung, und öffnen und initialisieren Sie das Rowset (und führen Sie auch ggf. einen Befehl aus):
hr = ds.Open(); hr = ss.Open(ds); hr = rs.Open(); // (Open also executes the command)
Legen Sie optional Rowseteigenschaften mit
CDBPropSet::AddProperty
fest, und übergeben Sie sie als Parameter anrs.Open
. Ein Beispiel hierfür finden Sie unterGetRowsetProperties
in Vom Consumer-Assistenten generierte Methoden.Sie können das Rowset jetzt zum Abrufen/Bearbeiten der Daten verwenden.
Wenn Ihre Anwendung abgeschlossen ist, schließen Sie Verbindung, Sitzung und Rowset:
rs.Close(); ss.Close(); ds.Close();
Wenn Sie einen Befehl verwenden, sollten Sie
ReleaseCommand
nachClose
aufrufen. Das Codebeispiel in CCommand::Close zeigt Ihnen, wie SieClose
undReleaseCommand
aufrufen.Rufen Sie
CoUnInitialize
auf, um die COM-Initialisierung aufzuheben. Dies wird im Hauptcode aufgerufen.CoUninitialize();