Freigeben über


CDynamicAccessor-Klasse

Ermöglicht es Ihnen, auf eine Datenquelle zuzugreifen, wenn Sie kein Wissen über das Datenbankschema haben (die zugrunde liegende Struktur der Datenbank).

Syntax

class CDynamicAccessor : public CAccessorBase

Requirements (Anforderungen)

Header: atldbcli.h

Mitglieder

Methoden

Name Beschreibung
AddBindEntry Fügt beim Überschreiben des Standardzugriffs einen Bindungseintrag zu den Ausgabespalten hinzu.
Cdynamicaccessor Instanziiert und initialisiert das CDynamicAccessor Objekt.
Schließen Hebt alle Spalten auf, gibt den zugewiesenen Speicher frei und gibt den IAccessor-Schnittstellenzeiger in der Klasse frei.
GetBlobHandling Ruft den BLOB-Verarbeitungswert für die aktuelle Zeile ab.
GetBlobSizeLimit Ruft die maximale BLOB-Größe in Bytes ab.
GetBookmark Ruft die Textmarke für die aktuelle Zeile ab.
GetColumnCount Ruft die Anzahl der Spalten im Rowset ab.
GetColumnFlags Ruft die Spaltenmerkmale ab.
Getcolumninfo Ruft die Spaltenmetadaten ab.
GetColumnName Ruft den Namen einer angegebenen Spalte ab.
GetColumnType Ruft den Datentyp einer angegebenen Spalte ab.
Getlength Ruft die maximal mögliche Länge einer Spalte in Bytes ab.
GetOrdinal Ruft den Spaltenindex anhand eines Spaltennamens ab.
Getstatus Ruft den Status einer angegebenen Spalte ab.
GetValue Ruft die Daten aus dem Puffer ab.
SetBlobHandling Legt den BLOB-Verarbeitungswert für die aktuelle Zeile fest.
SetBlobSizeLimit Legt die maximale BLOB-Größe in Byte fest.
Setlength Legt die Länge der Spalte in Byte fest.
SetStatus Legt den Status einer angegebenen Spalte fest.
SetValue Speichert die Daten im Puffer.

Hinweise

Verwenden Sie CDynamicAccessor Methoden zum Abrufen von Spalteninformationen wie Spaltennamen, Spaltenanzahl, Datentyp usw. Anschließend verwenden Sie diese Spalteninformationen, um zur Laufzeit einen Accessor dynamisch zu erstellen.

Die Spalteninformationen werden in einem Puffer gespeichert, der von dieser Klasse erstellt und verwaltet wird. Abrufen von Daten aus dem Puffer mithilfe von GetValue.

Eine Diskussion und Beispiele für die Verwendung der Klassen für dynamische Accessor finden Sie unter Verwenden von dynamischen Accessoren.

CDynamicAccessor::AddBindEntry

Fügt einen Bindungseintrag zu den Ausgabespalten hinzu.

Syntax

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

Parameter

info
[in] Eine DBCOLUMNINFO Struktur, die Spalteninformationen enthält. Siehe "DBCOLUMNINFO-Strukturen" in IColumnsInfo::GetColumnInfo in der OLE DB-Programmierreferenz.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Verwenden Sie diese Methode, wenn Sie den mit dem standard erstellten CDynamicAccessor Accessor überschreiben (siehe Wie kann ich Daten abrufen?).

CDynamicAccessor::CDynamicAccessor

Instanziiert und initialisiert das CDynamicAccessor Objekt.

Syntax

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

Parameter

eBlobHandling
Gibt an, wie die BLOB-Daten (Binary Large Object) behandelt werden sollen. Der Standardwert ist DBBLOBHANDLING_DEFAULT. Eine Beschreibung der DBBLOBHANDLINGENUM-Werte finden Sie unter SetBlobHandling .

nBlobSize
Die maximale BLOB-Größe in Byte; Spaltendaten über diesem Wert werden als BLOB behandelt. Der Standardwert ist 8.000. Weitere Informationen finden Sie unter SetBlobSizeLimit .

Hinweise

Wenn Sie den Konstruktor zum Initialisieren des CDynamicAccessor Objekts verwenden, können Sie angeben, wie bloBs gebunden werden sollen. BLOBs können Binärdaten wie Grafiken, Sound oder kompilierten Code enthalten. Das Standardverhalten besteht darin, Spalten mit mehr als 8.000 Bytes als BLOBs zu behandeln und diese an ein ISequentialStream Objekt zu binden. Sie können jedoch einen anderen Wert als BLOB-Größe angeben.

Sie können auch angeben, wie CDynamicAccessor Spaltendaten behandelt werden, die als BLOB-Daten qualifiziert sind: Sie kann BLOB-Daten auf die Standardweise verarbeiten; sie kann BLOB-Daten überspringen (nicht binden) oder BLOB-Daten in vom Anbieter zugewiesenen Speicher binden.

CDynamicAccessor::Close

Hebt alle Spalten auf, gibt den zugewiesenen Speicher frei und gibt den IAccessor-Schnittstellenzeiger in der Klasse frei.

Syntax

void Close() throw();

CDynamicAccessor::GetBlobHandling

Ruft den BLOB-Verarbeitungswert für die aktuelle Zeile ab.

Syntax

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Hinweise

Gibt den BLOB-Verarbeitungswert eBlobHandling zurück, wie durch SetBlobHandling festgelegt.

CDynamicAccessor::GetBlobSizeLimit

Ruft die maximale BLOB-Größe in Bytes ab.

Syntax

const DBLENGTH GetBlobSizeLimit() const;

Hinweise

Gibt den BLOB-Verarbeitungswert nBlobSize gemäß SetBlobSizeLimit zurück.

CDynamicAccessor::GetBookmark

Ruft die Textmarke für die aktuelle Zeile ab.

Syntax

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

Parameter

pBookmark
[out] Ein Zeiger auf das CBookmark-Objekt .

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Sie müssen auf VARIANT_TRUE festlegen DBPROP_IRowsetLocate , um eine Textmarke abzurufen.

CDynamicAccessor::GetColumnCount

Ruft die Anzahl der Spalten ab.

Syntax

DBORDINAL GetColumnCount() const throw();

Rückgabewert

Die Anzahl der abgerufenen Spalten.

CDynamicAccessor::GetColumnFlags

Ruft die Spaltenmerkmale ab.

Syntax

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

pFlags
[out] Ein Zeiger auf eine Bitmaske, die Spaltenmerkmale beschreibt. Siehe "DBCOLUMNFLAGS Enumerated Type" in IColumnsInfo::GetColumnInfo in der OLE DB-Programmierreferenz.

Rückgabewert

Gibt zurück true , wenn die Spaltenmerkmale erfolgreich abgerufen werden. Andernfalls wird falsezurückgegeben.

Hinweise

Die Spaltennummer wird von 1 versetzt. Spalte Null ist ein Sonderfall; es ist die Textmarke, falls verfügbar.

CDynamicAccessor::GetColumnInfo

Gibt die Spaltenmetadaten zurück, die von den meisten Verbrauchern benötigt werden.

Syntax

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

Parameter

pRowset
[in] Ein Zeiger auf die IRowset-Schnittstelle .

pColumns
[out] Ein Zeiger auf den Speicher, in dem die Anzahl der Spalten im Rowset zurückgegeben werden soll; Diese Zahl enthält die Textmarkenspalte, falls vorhanden.

ppColumnInfo
[out] Ein Zeiger auf den Speicher, in dem ein Array von DBCOLUMNINFO Strukturen zurückgegeben werden soll. Siehe "DBCOLUMNINFO-Strukturen" in IColumnsInfo::GetColumnInfo in der OLE DB-Programmierreferenz.

ppStringsBuffer
[out] Ein Zeiger auf den Speicher, in dem ein Zeiger auf den Speicher für alle Zeichenfolgenwerte (Namen, die in columnid oder für pwszName verwendet werden) innerhalb eines einzelnen Zuordnungsblocks zurückzugeben.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Weitere Informationen zu den Datentypen und zu den Datentypen und OLECHARzu den Daten finden Sie unter "IColumnInfo::GetColumnInfo" in der OLE DB-Programmierreferenz. DBCOLUMNINFODBORDINAL

CDynamicAccessor::GetColumnName

Ruft den Namen der angegebenen Spalte ab.

Syntax

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

Rückgabewert

Der Name der angegebenen Spalte.

CDynamicAccessor::GetColumnType

Ruft den Datentyp einer angegebenen Spalte ab.

Syntax

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

pType
[out] Ein Zeiger auf den Datentyp der angegebenen Spalte.

Rückgabewert

Gibt bei Erfolg oder false bei Fehlern zurücktrue.

CDynamicAccessor::GetLength

Ruft die Länge der angegebenen Spalte ab.

Syntax

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

pLength
[out] Ein Zeiger auf die ganze Zahl, die die Länge der Spalte in Byte enthält.

Rückgabewert

Gibt zurück true , wenn die angegebene Spalte gefunden wird. Andernfalls gibt diese Funktion zurück false.

Hinweise

Die erste Überschreibung übernimmt die Spaltennummer, und die zweite und dritte Überschreibung übernehmen den Spaltennamen im ANSI- oder Unicode-Format.

CDynamicAccessor::GetOrdinal

Ruft die Spaltennummer eines Spaltennamens ab.

Syntax

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

Parameter

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

pOrdinal
[out] Ein Zeiger auf die Spaltennummer.

Rückgabewert

Gibt zurück true , wenn eine Spalte mit dem angegebenen Namen gefunden wird. Andernfalls gibt diese Funktion zurück false.

CDynamicAccessor::GetStatus

Ruft den Status der angegebenen Spalte ab.

Syntax

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

pStatus
[out] Ein Zeiger auf die Variable, die den Spaltenstatus enthält. Weitere Informationen finden Sie unter DBSTATUS in der OLE DB-Programmierreferenz .

Rückgabewert

Gibt zurück true , wenn die angegebene Spalte gefunden wird. Andernfalls gibt diese Funktion zurück false.

CDynamicAccessor::GetValue

Ruft die Daten für eine angegebene Spalte ab.

Syntax

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

Parameter

ctype
[in] Ein vorlagenbasierter Parameter, der alle Datentypen außer Zeichenfolgentypen (CHAR*, ), die eine spezielle Behandlung erfordern, WCHAR*behandelt. GetValue verwendet den entsprechenden Datentyp basierend auf dem, was Sie hier angeben.

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

pColumnName
[in] Der Spaltenname.

Pdata
[out] Der Zeiger auf den Inhalt der angegebenen Spalte.

Rückgabewert

Wenn Sie Zeichenfolgendaten übergeben möchten, verwenden Sie die nicht vorlagenfreien Versionen von GetValue. Die nicht vorlagenfreien Versionen dieser Methode geben zurück void*, die auf den Teil des Puffers verweist, der die angegebenen Spaltendaten enthält. Gibt NULL zurück, wenn die Spalte nicht gefunden wird.

Für alle anderen Datentypen ist es einfacher, die vorlagenbasierten Versionen von GetValue. Die vorlagenbasierten Versionen werden bei Erfolg oder false bei Fehlern zurückgegebentrue.

Hinweise

Verwenden Sie die nicht vorlagenbasierten Versionen, um Spalten zurückzugeben, die Zeichenfolgen und die vorlagenbasierten Versionen für Spalten enthalten, die andere Datentypen enthalten.

Im Debugmodus erhalten Sie eine Assertion, wenn die Größe von pData ungleich der Größe der Spalte ist, auf die sie verweist.

CDynamicAccessor::SetBlobHandling

Legt den BLOB-Verarbeitungswert für die aktuelle Zeile fest.

Syntax

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parameter

eBlobHandling
Gibt an, wie die BLOB-Daten verarbeitet werden sollen. Die folgenden Werte sind möglich:

  • DBBLOBHANDLING_DEFAULT: Verarbeiten von Spaltendaten, die größer als nBlobSize (wie festgelegt durch SetBlobSizeLimit) als BLOB-Daten und abrufen sie über ein ISequentialStream oder IStream Objekt. Mit dieser Option wird versucht, jede Spalte zu binden, die Daten enthält, die größer als nBlobSize oder als DBTYPE_IUNKNOWN als BLOB-Daten aufgeführt sind.

  • DBBLOBHANDLING_NOSTREAMS: Behandeln Sie Spaltendaten, die größer als nBlobSize (wie festgelegt von SetBlobSizeLimit) als BLOB-Daten sind, und rufen Sie sie über einen Verweis in vom Anbieter zugewiesenen, verbrauchereigenen Speicher ab. Diese Option ist nützlich für Tabellen mit mehr als einer BLOB-Spalte, und der Anbieter unterstützt nur ein ISequentialStream Objekt pro Accessor.

  • DBBLOBHANDLING_SKIP: Spalten überspringen (nicht binden), die als BLOBs qualifizieren (der Accessor bindet oder ruft den Spaltenwert nicht ab, aber er ruft weiterhin den Spaltenstatus und die Länge ab).

Hinweise

Sie sollten SetBlobHandling vor Open aufrufen.

Die Konstruktormethode CDynamicAccessor legt den BLOB-Verarbeitungswert auf DBBLOBHANDLING_DEFAULT fest.

CDynamicAccessor::SetBlobSizeLimit

Legt die maximale BLOB-Größe in Byte fest.

Syntax

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parameter

nBlobSize
Gibt die BLOB-Größenbeschränkung an.

Hinweise

Legt die maximale BLOB-Größe in Bytes fest; Spaltendaten, die größer als dieser Wert sind, werden als BLOB behandelt. Einige Anbieter geben extrem große Größen für Spalten (z. B. 2 GB). Anstatt zu versuchen, Speicher für eine Spalte dieser Größe zuzuweisen, würden Sie in der Regel versuchen, diese Spalten als BLOBs zu binden. Auf diese Weise müssen Sie nicht den gesamten Speicher zuordnen, aber Sie können weiterhin alle Daten lesen, ohne Angst vor abschneiden zu müssen. Es gibt jedoch einige Fälle, in denen Sie möglicherweise erzwingen CDynamicAccessor möchten, große Spalten in ihren systemeigenen Datentypen zu binden. Rufen Sie SetBlobSizeLimit dazu vor dem Anruf Openauf.

Die Konstruktormethode CDynamicAccessor legt die maximale BLOB-Größe auf einen Standardwert von 8.000 Bytes fest.

CDynamicAccessor::SetLength

Legt die Länge der angegebenen Spalte fest.

Syntax

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

nLength
[in] Die Länge der Spalte in Byte.

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

Rückgabewert

Gibt zurück true , wenn die angegebene Spaltenlänge erfolgreich festgelegt wurde. Andernfalls gibt diese Funktion zurück false.

CDynamicAccessor::SetStatus

Legt den Status der angegebenen Spalte fest.

Syntax

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

Parameter

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

status
[in] Der Spaltenstatus. Weitere Informationen finden Sie unter DBSTATUS in der OLE DB-Programmierreferenz .

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

Rückgabewert

Gibt zurück true , wenn der angegebene Spaltenstatus erfolgreich festgelegt wurde. Andernfalls gibt diese Funktion zurück false.

CDynamicAccessor::SetValue

Speichert Daten in einer angegebenen Spalte.

Syntax

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

Parameter

ctype
[in] Ein vorlagenbasierter Parameter, der alle Datentypen außer Zeichenfolgentypen (CHAR*, ), die eine spezielle Behandlung erfordern, WCHAR*behandelt. GetValue verwendet den entsprechenden Datentyp basierend auf dem, was Sie hier angeben.

pColumnName
[in] Ein Zeiger auf eine Zeichenfolge, die den Spaltennamen enthält.

data
[in] Der Zeiger auf den Speicher, der die Daten enthält.

nColumn
[in] Die Spaltennummer. Spaltennummern beginnen mit 1. Wenn vorhanden, bezieht sich der Wert 0 auf die Textmarkenspalte.

Rückgabewert

Wenn Sie Zeichenfolgendaten festlegen möchten, verwenden Sie die nicht vorlagenfreien Versionen von GetValue. Die nicht vorlagenfreien Versionen dieser Methode geben zurück void*, die auf den Teil des Puffers verweist, der die angegebenen Spaltendaten enthält. Gibt NULL zurück, wenn die Spalte nicht gefunden wird.

Für alle anderen Datentypen ist es einfacher, die vorlagenbasierten Versionen von GetValue. Die vorlagenbasierten Versionen werden bei Erfolg oder false bei Fehlern zurückgegebentrue.

Siehe auch

OLE DB-Consumervorlagen
Referenz der OLE DB-Consumervorlagen
CAccessor-Klasse
CDynamicParameterAccessor-Klasse
CManualAccessor-Klasse