Sdílet prostřednictvím


CDynamicAccessor – třída

Umožňuje přístup ke zdroji dat, pokud nemáte žádné znalosti o schématu databáze (základní struktura databáze).

Syntaxe

class CDynamicAccessor : public CAccessorBase

Požadavky

Hlavička: atldbcli.h

Členové

Metody

Název Popis
AddBindEntry Přidá položku vazby do výstupních sloupců při přepsání výchozího přístupového objektu.
CDynamicAccessor Vytvoří instanci a inicializuje CDynamicAccessor objekt.
Zavřít Zruší vazbu všech sloupců, uvolní přidělenou paměť a uvolní ukazatel rozhraní IAccessor ve třídě.
GetBlobHandling Načte hodnotu zpracování objektů blob pro aktuální řádek.
GetBlobSizeLimit Načte maximální velikost objektu BLOB v bajtech.
GetBookmark Načte záložku pro aktuální řádek.
GetColumnCount Načte počet sloupců v sadě řádků.
GetColumnFlags Načte charakteristiky sloupce.
GetColumnInfo Načte metadata sloupců.
GetColumnName Načte název zadaného sloupce.
GetColumnType Načte datový typ zadaného sloupce.
GetLength Načte maximální možnou délku sloupce v bajtech.
GetOrdinal Načte index sloupce s názvem sloupce.
GetStatus Načte stav zadaného sloupce.
GetValue Načte data z vyrovnávací paměti.
SetBlobHandling Nastaví hodnotu zpracování objektů blob pro aktuální řádek.
SetBlobSizeLimit Nastaví maximální velikost objektu blob v bajtech.
SetLength Nastaví délku sloupce v bajtech.
SetStatus Nastaví stav zadaného sloupce.
SetValue Ukládá data do vyrovnávací paměti.

Poznámky

Pomocí CDynamicAccessor metod můžete získat informace o sloupcích, jako jsou názvy sloupců, počet sloupců, datový typ atd. Tyto informace o sloupci pak použijete k dynamickému vytvoření přístupového objektu za běhu.

Informace o sloupci jsou uloženy ve vyrovnávací paměti, která je vytvořena a spravována touto třídou. Získání dat z vyrovnávací paměti pomocí GetValue.

Diskuzi a příklady použití tříd dynamického přístupového objektu naleznete v tématu Použití dynamických přístupových objektů.

CDynamicAccessor::AddBindEntry

Přidá položku vazby do výstupních sloupců.

Syntaxe

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

Parametry

informace
[v] Struktura DBCOLUMNINFO obsahující informace o sloupci. Viz "DBCOLUMNINFO Struktury" v IColumnsInfo::GetColumnInfo v odkazech programátora OLE DB.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Tuto metodu použijte při přepsání výchozího přístupového objektu vytvořeného pomocí CDynamicAccessor (viz Jak načíst data?).

CDynamicAccessor::CDynamicAccessor

Vytvoří instanci a inicializuje CDynamicAccessor objekt.

Syntaxe

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

Parametry

eBlobHandling
Určuje způsob zpracování binárních velkých objektů (BLOB) dat. Výchozí hodnota je DBBLOBHANDLING_DEFAULT. Popis hodnot DBBLOBHANDLINGENUM naleznete v tématu SetBlobHandling .

nBlobSize
Maximální velikost objektu blob v bajtech; data sloupce nad touto hodnotou se považují za objekt BLOB. Výchozí hodnota je 8 000. Podrobnosti najdete v tématu SetBlobSizeLimit .

Poznámky

Pokud k inicializaci objektu CDynamicAccessor použijete konstruktor, můžete určit, jak bude svázat objekty BLOB. Objekty BLOB můžou obsahovat binární data, jako jsou grafika, zvuk nebo zkompilovaný kód. Výchozím chováním je považovat sloupce větší než 8 000 bajtů za objekty BLOB a pokusit se je svázat s objektem ISequentialStream . Můžete ale zadat jinou hodnotu, která má být velikost objektu blob.

Můžete také určit, jak CDynamicAccessor zpracovává data sloupců, která jsou kvalifikována jako data objektu blob: může zpracovávat data objektů blob výchozím způsobem, může přeskočit (nevázat) data objektu BLOB nebo můžou svázat data objektů blob v paměti přidělené zprostředkovatelem.

CDynamicAccessor::Close

Zruší vazbu všech sloupců, uvolní přidělenou paměť a uvolní ukazatel rozhraní IAccessor ve třídě.

Syntaxe

void Close() throw();

CDynamicAccessor::GetBlobHandling

Načte hodnotu zpracování objektů blob pro aktuální řádek.

Syntaxe

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Poznámky

Vrátí hodnotu zpracování objektů blob eBlobHandling nastavenou pomocí SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Načte maximální velikost objektu BLOB v bajtech.

Syntaxe

const DBLENGTH GetBlobSizeLimit() const;

Poznámky

Vrátí hodnotu zpracování objektů blob nBlobSize nastavenou hodnotou SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Načte záložku pro aktuální řádek.

Syntaxe

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

Parametry

pBookmark
[ven] Ukazatel na objekt CBookmark .

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Pokud chcete načíst záložku, musíte nastavit DBPROP_IRowsetLocate VARIANT_TRUE.

CDynamicAccessor::GetColumnCount

Načte počet sloupců.

Syntaxe

DBORDINAL GetColumnCount() const throw();

Návratová hodnota

Počet načtenýchsloupcůch

CDynamicAccessor::GetColumnFlags

Načte charakteristiky sloupce.

Syntaxe

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

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

pFlags
[ven] Ukazatel na bitovou masku, který popisuje charakteristiky sloupců. Viz "DBCOLUMNFLAGS Enumerated Type" v IColumnsInfo::GetColumnInfo v odkazech programátorů OLE DB.

Návratová hodnota

Vrátí true , pokud se charakteristiky sloupce úspěšně načtou. V opačném případě se vrátí false.

Poznámky

Číslo sloupce je posunuté od jednoho. Sloupec nula je zvláštní případ; je to záložka, pokud je k dispozici.

CDynamicAccessor::GetColumnInfo

Vrátí metadata sloupců potřebná většinou uživatelů.

Syntaxe

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

Parametry

pRowset
[v] Ukazatel na rozhraní IRowset .

pColumns
[ven] Ukazatel na paměť, ve které se má vrátit počet sloupců v sadě řádků; toto číslo obsahuje sloupec záložky, pokud existuje.

ppColumnInfo
[ven] Ukazatel na paměť, ve které se má vrátit pole DBCOLUMNINFO struktur. Viz "DBCOLUMNINFO Struktury" v IColumnsInfo::GetColumnInfo v odkazech programátora OLE DB.

ppStringsBuffer
[ven] Ukazatel na paměť, ve které se má vrátit ukazatel na úložiště pro všechny řetězcové hodnoty (názvy používané buď v rámci columnid , nebo pro pwszName) v rámci jednoho bloku přidělení.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Viz IColumnsInfo::GetColumnInfo v odkazech programátora OLE DB informace o datových typech DBORDINAL, DBCOLUMNINFOa OLECHAR.

CDynamicAccessor::GetColumnName

Načte název zadaného sloupce.

Syntaxe

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

Návratová hodnota

Název zadaného sloupce.

CDynamicAccessor::GetColumnType

Načte datový typ zadaného sloupce.

Syntaxe

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

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

pType
[ven] Ukazatel na datový typ zadaného sloupce.

Návratová hodnota

Vrátí true úspěch nebo false selhání.

CDynamicAccessor::GetLength

Načte délku zadaného sloupce.

Syntaxe

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();

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

pLength
[ven] Ukazatel na celé číslo obsahující délku sloupce v bajtech.

Návratová hodnota

Vrátí true , pokud je nalezen zadaný sloupec. V opačném případě vrátí tato funkce falsehodnotu .

Poznámky

První přepsání přebírá číslo sloupce a druhá a třetí přepsání přepíší název sloupce ve formátu ANSI nebo Unicode.

CDynamicAccessor::GetOrdinal

Načte číslo sloupce s názvem sloupce.

Syntaxe

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

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

Parametry

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

Pořadové číslo
[ven] Ukazatel na číslo sloupce.

Návratová hodnota

Vrátí true , pokud se najde sloupec se zadaným názvem. V opačném případě vrátí tato funkce falsehodnotu .

CDynamicAccessor::GetStatus

Načte stav zadaného sloupce.

Syntaxe

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();

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

pStatus
[ven] Ukazatel na proměnnou obsahující stav sloupce. Další informace najdete v tématu DBSTATUS v referenčních informacích programátora OLE DB.

Návratová hodnota

Vrátí true , pokud je nalezen zadaný sloupec. V opačném případě vrátí tato funkce falsehodnotu .

CDynamicAccessor::GetValue

Načte data pro zadaný sloupec.

Syntaxe

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();

Parametry

ctype
[v] Šablona parametru, který zpracovává jakýkoli datový typ s výjimkou typů řetězců (CHAR*, WCHAR*), které vyžadují zvláštní zpracování. GetValue používá příslušný datový typ na základě toho, co zde zadáte.

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

pColumnName
[v] Název sloupce.

pData
[ven] Ukazatel na obsah zadaného sloupce.

Návratová hodnota

Pokud chcete předat řetězcová data, použijte netemplatované verze GetValue. Netemplatované verze této metody vrátí void*, který odkazuje na část vyrovnávací paměti, která obsahuje zadaná data sloupce. Vrátí hodnotu NULL, pokud sloupec nebyl nalezen.

Pro všechny ostatní datové typy je jednodušší použít šablonované verze GetValue. Šablonované verze se vrátí true k úspěchu nebo false selhání.

Poznámky

Netemplatované verze slouží k vrácení sloupců obsahujících řetězce a šablonované verze pro sloupce, které obsahují jiné datové typy.

V režimu ladění získáte kontrolní výraz, pokud je velikost pData nerovná se velikostí sloupce, na který odkazuje.

CDynamicAccessor::SetBlobHandling

Nastaví hodnotu zpracování objektů blob pro aktuální řádek.

Syntaxe

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parametry

eBlobHandling
Určuje způsob zpracování dat objektu blob. Může mít následující hodnoty:

  • DBBLOBHANDLING_DEFAULT: Zpracování dat sloupců větších než nBlobSize (podle sadySetBlobSizeLimit) jako dat objektů blob a jejich načtení prostřednictvím objektu nebo IStream objektuISequentialStream. Tato možnost se pokusí svázat každý sloupec obsahující data větší než nBlobSize nebo je uveden jako DBTYPE_IUNKNOWN jako data objektů blob.

  • DBBLOBHANDLING_NOSTREAMS: Zpracovává data sloupců větší než nBlobSize (jak je nastavená SetBlobSizeLimit) jako data objektů blob a načítá je prostřednictvím odkazu v paměti vlastněné poskytovatelem. Tato možnost je užitečná pro tabulky, které mají více než jeden sloupec objektu BLOB a poskytovatel podporuje pouze jeden ISequentialStream objekt na přístup.

  • DBBLOBHANDLING_SKIP: Přeskočte (nevázat) sloupce, které jsou kvalifikující jako sloupce obsahující objekty BLOB (přistupující objekt neváže nebo načte hodnotu sloupce, ale stále načte stav a délku sloupce).

Poznámky

Měli byste volat SetBlobHandling před voláním Open.

Metoda konstruktoru CDynamicAccessor nastaví hodnotu zpracování objektů blob na DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Nastaví maximální velikost objektu blob v bajtech.

Syntaxe

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parametry

nBlobSize
Určuje limit velikosti objektu blob.

Poznámky

Nastaví maximální velikost objektu BLOB v bajtech; Data sloupce větší než tato hodnota se považují za objekt BLOB. Někteří poskytovatelé poskytují pro sloupce extrémně velké velikosti (například 2 GB). Místo toho, abyste se pokusili přidělit paměť pro sloupec s touto velikostí, obvykle byste se pokusili tyto sloupce svázat jako objekty BLOB. Tímto způsobem nemusíte přidělovat veškerou paměť, ale přesto můžete číst všechna data bez obav z zkrácení. Existují však některé případy, kdy můžete chtít vynutit CDynamicAccessor vytvoření vazby velkých sloupců v jejich nativních datových typech. Chcete-li to provést, zavolejte SetBlobSizeLimit před voláním Open.

Metoda konstruktoru CDynamicAccessor nastaví maximální velikost objektu BLOB na výchozí hodnotu 8 000 bajtů.

CDynamicAccessor::SetLength

Nastaví délku zadaného sloupce.

Syntaxe

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

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

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

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

nLength
[v] Délka sloupce v bajtech.

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

Návratová hodnota

Vrátí true , pokud je zadaná délka sloupce úspěšně nastavena. V opačném případě vrátí tato funkce falsehodnotu .

CDynamicAccessor::SetStatus

Nastaví stav zadaného sloupce.

Syntaxe

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

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

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

Parametry

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

status
[v] Stav sloupce. Další informace najdete v tématu DBSTATUS v referenčních informacích programátora OLE DB.

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

Návratová hodnota

Vrátí true , pokud je zadaný stav sloupce úspěšně nastaven. V opačném případě vrátí tato funkce falsehodnotu .

CDynamicAccessor::SetValue

Ukládá data do zadaného sloupce.

Syntaxe

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( );

Parametry

ctype
[v] Šablona parametru, který zpracovává jakýkoli datový typ s výjimkou typů řetězců (CHAR*, WCHAR*), které vyžadují zvláštní zpracování. GetValue používá příslušný datový typ na základě toho, co zde zadáte.

pColumnName
[v] Ukazatel na řetězec znaků obsahující název sloupce.

data
[v] Ukazatel na paměť obsahující data.

nSloupcová
[v] Číslo sloupce. Čísla sloupců začínají číslem 1. Hodnota 0 odkazuje na sloupec záložky( pokud existuje).

Návratová hodnota

Pokud chcete nastavit řetězcová data, použijte netemplatované verze GetValue. Netemplatované verze této metody vrátí void*, který odkazuje na část vyrovnávací paměti, která obsahuje zadaná data sloupce. Vrátí hodnotu NULL, pokud sloupec nebyl nalezen.

Pro všechny ostatní datové typy je jednodušší použít šablonované verze GetValue. Šablonované verze se vrátí true k úspěchu nebo false selhání.

Viz také

Šablony příjemců OLE DB
Referenční dokumentace k šablonám příjemců OLE DB
CAccessor – třída
CDynamicParameterAccessor – třída
CManualAccessor – třída