Accessoren und Rowsets
Zum Festlegen und Abrufen von Daten verwenden die OLE DB-Vorlagen einen Accessor und ein Rowset über die CAccessorRowset-Klasse. Diese Klasse kann mehrere verschiedene Accessoren behandeln.
Accessortypen
Alle Accessoren werden von CAccessorBase abgeleitet. CAccessorBase stellt sowohl Parameter- als auch Spaltenbindung bereit.
Die folgende Abbildung zeigt die verschiedenen Accessortypen.
Accessorklassen
CAccessor Verwenden Sie diesen Accessor, wenn Ihnen die Struktur der Datenbankquelle zur Entwurfszeit bekannt ist. CAccessor bindet den Datenbankdatensatz, der den Puffer enthält, statisch an die Datenquelle.
CDynamicAccessor Verwenden Sie diesen Accessor, wenn Ihnen die Struktur der Datenbankquelle zur Entwurfszeit nicht bekannt ist. CDynamicAccessor ruft IColumnsInfo::GetColumnInfo auf, um die Spalteninformationen für die Datenbank abzurufen. Er erstellt und verwaltet einen Accessor und den Puffer.
CDynamicParameterAccessor Verwenden Sie diesen Accessor, um unbekannte Befehlstypen zu verarbeiten. Während Sie die Befehle vorbereiten, kann CDynamicParameterAccessor Parameterinformationen von der ICommandWithParameters-Schnittstelle beziehen, sofern der Anbieter ICommandWithParameters unterstützt.
CDynamicStringAccessor, CDynamicStringAccessorA und CDynamicStringAccessorW Verwenden Sie diese Klassen, wenn Ihnen das Datenbankschema nicht bekannt ist. CDynamicStringAccessorA empfängt Daten als ANSI-Zeichenfolgen, und CDynamicStringAccessorW empfängt Daten als Unicode-Zeichenfolgen.
CManualAccessor Mit dieser Klasse können Sie alle Datentypen verwenden, die der Anbieter konvertieren kann. Sie verarbeitet sowohl Ergebnisspalten als auch Befehlsparameter.
In der folgenden Tabelle wird die Unterstützung in den OLE DB-Vorlagenaccessortypen zusammengefasst.
Accessortyp |
Dynamisch |
Parameterbehandlung |
Puffer |
Mehrere Accessoren |
---|---|---|---|---|
CAccessor |
Nein |
Ja |
Benutzer |
Ja |
CDynamicAccessor |
Ja |
Nein |
OLE DB-Vorlagen |
Nein |
CDynamicParameterAccessor |
Ja |
Ja |
OLE DB-Vorlagen |
Nein |
CDynamicStringAccessor[A,W] |
Ja |
Nein |
OLE DB-Vorlagen |
Nein |
CManualAccessor |
Ja |
Ja |
Benutzer |
Ja |
Rowsettypen
Die OLE DB-Vorlagen unterstützen drei Arten von Rowsets (siehe Abbildung oben): einzelne Rowsets (implementiert durch CRowset), Sammelrowsets (implementiert durch CBulkRowset) und Arrayrowsets (implementiert durch CArrayRowset). Einzelne Rowsets rufen ein einzelnes Zeilenhandle ab, wenn MoveNext aufgerufen wird. Sammelrowsets können mehrere Zeilenhandles abrufen. Bei Arrayrowsets handelt es sich um Rowsets, auf die mithilfe von Arraysyntax zugegriffen werden kann.
Die folgende Abbildung zeigt die verschiedenen Rowsettypen.
Rowset-Klassen
Schemarowsets greifen nicht auf Daten im Datenspeicher, sondern auf Informationen über den Datenspeicher, so genannte Metadaten, zu. Schemarowsets werden gewöhnlich in Situationen verwendet, in denen die Datenbankstruktur zum Zeitpunkt der Kompilierung nicht bekannt ist und zur Laufzeit ermittelt werden muss.