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
Anforderungen
Header: atldbcli.h
Member
Methoden
Name | Beschreibung |
---|---|
AddBindEntry | Fügt beim Überschreiben des Standardzugriffs einen Bindungseintrag zu den Ausgabespalten hinzu. |
CDynamicAccessor | Instanziiert und initialisiert das CDynamicAccessor Objekt. |
Abschließ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 false
zurü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 OLECHAR
zu den Daten finden Sie unter "IColumnInfo::GetColumnInfo" in der OLE DB-Programmierreferenz. DBCOLUMNINFO
DBORDINAL
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 einISequentialStream
oderIStream
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 einISequentialStream
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 Open
auf.
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