Udostępnij za pośrednictwem


CDynamicAccessor — Klasa

Umożliwia dostęp do źródła danych, gdy nie masz wiedzy na temat schematu bazy danych (podstawowej struktury bazy danych).

Składnia

class CDynamicAccessor : public CAccessorBase

Wymagania

Nagłówek: atldbcli.h

Elementy członkowskie

Metody

Nazwa/nazwisko opis
AddBindEntry Dodaje wpis powiązania do kolumn wyjściowych podczas zastępowania domyślnego metody dostępu.
CDynamicAccessor Tworzy wystąpienie i inicjuje CDynamicAccessor obiekt.
Zamknij Usuwa wszystkie kolumny, zwalnia przydzieloną pamięć i zwalnia wskaźnik interfejsu IAccessor w klasie.
GetBlobHandling Pobiera wartość obsługi obiektu BLOB dla bieżącego wiersza.
GetBlobSizeLimit Pobiera maksymalny rozmiar obiektu BLOB w bajtach.
GetBookmark Pobiera zakładkę dla bieżącego wiersza.
GetColumnCount Pobiera liczbę kolumn w zestawie wierszy.
GetColumnFlags Pobiera charakterystykę kolumny.
GetColumnInfo Pobiera metadane kolumny.
GetColumnName Pobiera nazwę określonej kolumny.
GetColumnType Pobiera typ danych określonej kolumny.
GetLength Pobiera maksymalną możliwą długość kolumny w bajtach.
GetOrdinal Pobiera indeks kolumny o nazwie kolumny.
GetStatus Pobiera stan określonej kolumny.
GetValue Pobiera dane z buforu.
SetBlobHandling Ustawia wartość obsługi obiektu BLOB dla bieżącego wiersza.
SetBlobSizeLimit Ustawia maksymalny rozmiar obiektu BLOB w bajtach.
SetLength Ustawia długość kolumny w bajtach.
SetStatus Ustawia stan określonej kolumny.
SetValue Przechowuje dane w buforze.

Uwagi

Użyj CDynamicAccessor metod, aby uzyskać informacje o kolumnach, takie jak nazwy kolumn, liczba kolumn, typ danych itd. Następnie użyjesz tych informacji w kolumnie, aby dynamicznie utworzyć metodę dostępu w czasie wykonywania.

Informacje o kolumnie są przechowywane w buforze utworzonym i zarządzanym przez tę klasę. Uzyskiwanie danych z buforu przy użyciu metody GetValue.

Aby zapoznać się z omówieniem i przykładami używania dynamicznych klas dostępu, zobacz Using Dynamic Accessors (Używanie dynamicznych metod dostępu).

CDynamicAccessor::AddBindEntry

Dodaje wpis powiązania do kolumn wyjściowych.

Składnia

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

Parametry

Informacji
[in] Struktura zawierająca DBCOLUMNINFO informacje o kolumnie. Zobacz "DBCOLUMNINFO Structures" (Struktury DBCOLUMNINFO) w temacie IColumnsInfo::GetColumnInfo w dokumentacji programisty OLE DB.

Wartość zwracana

Jedna ze standardowych wartości HRESULT.

Uwagi

Użyj tej metody podczas zastępowania domyślnego metody dostępu utworzonego CDynamicAccessor za pomocą (zobacz How Do I Fetch Data?).

CDynamicAccessor::CDynamicAccessor

Tworzy wystąpienie i inicjuje CDynamicAccessor obiekt.

Składnia

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

Parametry

eBlobHandling
Określa sposób obsługi danych binarnych dużych obiektów (BLOB). Wartość domyślna to DBBLOBHANDLING_DEFAULT. Aby uzyskać opis wartości DBBLOBHANDHANDUM, zobacz SetBlobHandling .

nBlobSize
Maksymalny rozmiar obiektu BLOB w bajtach; dane kolumn nad tą wartością są traktowane jako obiekt BLOB. Wartość domyślna to 8000. Aby uzyskać szczegółowe informacje, zobacz SetBlobSizeLimit .

Uwagi

Jeśli używasz konstruktora do inicjowania CDynamicAccessor obiektu, możesz określić sposób powiązania obiektów BLOB. BLOBs mogą zawierać dane binarne, takie jak grafika, dźwięk lub skompilowany kod. Domyślne zachowanie polega na traktowaniu kolumn przekraczających 8000 bajtów jako BLOB i próbie powiązania ich z obiektem ISequentialStream . Można jednak określić inną wartość, która ma być rozmiarem obiektu blob.

Można również określić sposób CDynamicAccessor obsługi danych kolumn, które kwalifikują się jako dane obiektu BLOB: może obsługiwać dane obiektów BLOB w domyślny sposób; może pominąć (nie powiązać) danych obiektu BLOB lub powiązać dane obiektu blob w pamięci przydzielonej przez dostawcę.

CDynamicAccessor::Close

Usuwa wszystkie kolumny, zwalnia przydzieloną pamięć i zwalnia wskaźnik interfejsu IAccessor w klasie.

Składnia

void Close() throw();

CDynamicAccessor::GetBlobHandling

Pobiera wartość obsługi obiektu BLOB dla bieżącego wiersza.

Składnia

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Uwagi

Zwraca wartość obsługi obiektów BLOB eBlobHandling ustawioną przez SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Pobiera maksymalny rozmiar obiektu BLOB w bajtach.

Składnia

const DBLENGTH GetBlobSizeLimit() const;

Uwagi

Zwraca wartość obsługi obiektów BLOB nBlobSize zgodnie z ustawieniem SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Pobiera zakładkę dla bieżącego wiersza.

Składnia

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

Parametry

pBookmark
[out] Wskaźnik do obiektu CBookmark .

Wartość zwracana

Jedna ze standardowych wartości HRESULT.

Uwagi

Musisz ustawić DBPROP_IRowsetLocate wartość VARIANT_TRUE, aby pobrać zakładkę.

CDynamicAccessor::GetColumnCount

Pobiera liczbę kolumn.

Składnia

DBORDINAL GetColumnCount() const throw();

Wartość zwracana

Liczba pobranych kolumn.

CDynamicAccessor::GetColumnFlags

Pobiera charakterystykę kolumny.

Składnia

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

Parametry

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

Opóźnienia pFlags
[out] Wskaźnik do maski bitowej, która opisuje charakterystykę kolumn. Zobacz ciąg "DBCOLUMNFLAGS Enumerated Type" (Typ wyliczony w pliku IColumnsInfo::GetColumnInfo ) w dokumentacji programisty OLE DB.

Wartość zwracana

Zwraca wartość true , jeśli właściwości kolumny zostały pomyślnie pobrane. W przeciwnym razie zwraca wartość false.

Uwagi

Numer kolumny jest przesunięty z jednego. Zero kolumny jest specjalnym przypadkiem; jest to zakładka, jeśli jest dostępna.

CDynamicAccessor::GetColumnInfo

Zwraca metadane kolumny wymagane przez większość użytkowników.

Składnia

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

Parametry

pRowset
[in] Wskaźnik do interfejsu IRowset .

pColumns
[out] Wskaźnik do pamięci, w którym ma być zwracana liczba kolumn w zestawie wierszy; ta liczba zawiera kolumnę zakładki, jeśli istnieje.

ppColumnInfo
[out] Wskaźnik do pamięci, w którym ma być zwracana tablica DBCOLUMNINFO struktur. Zobacz "DBCOLUMNINFO Structures" (Struktury DBCOLUMNINFO) w temacie IColumnsInfo::GetColumnInfo w dokumentacji programisty OLE DB.

ppStringsBuffer
[out] Wskaźnik do pamięci, w którym należy zwrócić wskaźnik do magazynu dla wszystkich wartości ciągów (nazwy używane w kolumnie columnid lub pwszName) w jednym bloku alokacji.

Wartość zwracana

Jedna ze standardowych wartości HRESULT.

Uwagi

Zobacz IColumnsInfo::GetColumnInfo w dokumentacji programisty OLE DB, aby uzyskać informacje na temat typów DBORDINALdanych , DBCOLUMNINFOi OLECHAR.

CDynamicAccessor::GetColumnName

Pobiera nazwę określonej kolumny.

Składnia

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parametry

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

Wartość zwracana

Nazwa określonej kolumny.

CDynamicAccessor::GetColumnType

Pobiera typ danych określonej kolumny.

Składnia

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

Parametry

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

typ pType
[out] Wskaźnik do typu danych określonej kolumny.

Wartość zwracana

Zwraca wartość true powodzenia lub false niepowodzenia.

CDynamicAccessor::GetLength

Pobiera długość określonej kolumny.

Składnia

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

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

PLength
[out] Wskaźnik do liczby całkowitej zawierającej długość kolumny w bajtach.

Wartość zwracana

Zwraca wartość true , jeśli zostanie znaleziona określona kolumna. W przeciwnym razie ta funkcja zwraca wartość false.

Uwagi

Pierwsze zastąpienie przyjmuje numer kolumny, a drugie i trzecie przesłonięcia przyjmują odpowiednio nazwę kolumny w formacie ANSI lub Unicode.

CDynamicAccessor::GetOrdinal

Pobiera numer kolumny przy użyciu nazwy kolumny.

Składnia

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

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

Parametry

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

pOrdinal
[out] Wskaźnik do numeru kolumny.

Wartość zwracana

Zwraca wartość true , jeśli zostanie znaleziona kolumna o określonej nazwie. W przeciwnym razie ta funkcja zwraca wartość false.

CDynamicAccessor::GetStatus

Pobiera stan określonej kolumny.

Składnia

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

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

pStatus
[out] Wskaźnik do zmiennej zawierającej stan kolumny. Aby uzyskać więcej informacji, zobacz DBSTATUS w dokumentacji programisty OLE DB.

Wartość zwracana

Zwraca wartość true , jeśli zostanie znaleziona określona kolumna. W przeciwnym razie ta funkcja zwraca wartość false.

CDynamicAccessor::GetValue

Pobiera dane dla określonej kolumny.

Składnia

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
[in] Szablonowy parametr obsługujący dowolny typ danych z wyjątkiem typów ciągów (CHAR*, WCHAR*), które wymagają specjalnej obsługi. GetValue używa odpowiedniego typu danych na podstawie tego, co określisz tutaj.

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

pColumnName
[in] Nazwa kolumny.

pData
[out] Wskaźnik do zawartości określonej kolumny.

Wartość zwracana

Jeśli chcesz przekazać dane ciągu, użyj nieplatanych wersji programu GetValue. Wersje nieplated tej metody zwracają wartość void*, która wskazuje część buforu, która zawiera określone dane kolumny. Zwraca wartość NULL, jeśli nie znaleziono kolumny.

W przypadku wszystkich innych typów danych łatwiej jest użyć szablonowych wersji programu GetValue. Wersje szablonów zwracają true powodzenie lub false niepowodzenie.

Uwagi

Użyj nieplatformowanych wersji, aby zwrócić kolumny zawierające ciągi i wersje szablonów dla kolumn zawierających inne typy danych.

W trybie debugowania otrzymasz asercję, jeśli rozmiar pData jest nierówny do rozmiaru kolumny, do której wskazuje.

CDynamicAccessor::SetBlobHandling

Ustawia wartość obsługi obiektu BLOB dla bieżącego wiersza.

Składnia

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parametry

eBlobHandling
Określa sposób obsługi danych obiektu BLOB. Może to przyjmować następujące wartości:

  • DBBLOBHANDLING_DEFAULT: Obsługa danych kolumn większych niż nBlobSize (zgodnie z ustawieniem SetBlobSizeLimit) jako danych obiektu BLOB i pobierania ich za pośrednictwem ISequentialStream obiektu lub IStream . Ta opcja spróbuje powiązać każdą kolumnę zawierającą dane większe niż nBlobSize lub wymienione jako DBTYPE_IUNKNOWN jako dane obiektu BLOB.

  • DBBLOBHANDLING_NOSTREAMS: Obsługa danych kolumn większych niż nBlobSize (zgodnie z SetBlobSizeLimitwartością ) jako danych obiektu BLOB i pobieranie ich za pomocą odwołania w pamięci przydzielonej przez dostawcę, należącej do użytkownika. Ta opcja jest przydatna w przypadku tabel, które mają więcej niż jedną kolumnę OBIEKTU BLOB, a dostawca obsługuje tylko jeden ISequentialStream obiekt na metodę dostępu.

  • DBBLOBHANDLING_SKIP: Pomiń (nie powiąż) kolumn kwalifikujące się jako zawierające wartości BLOB (akcesorium nie będzie wiązać ani pobierać wartości kolumny, ale nadal pobiera stan i długość kolumny).

Uwagi

Przed wywołaniem metody należy wywołać metodę SetBlobHandling Open.

Metoda konstruktora CDynamicAccessor ustawia wartość obsługi obiektu BLOB na DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Ustawia maksymalny rozmiar obiektu BLOB w bajtach.

Składnia

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parametry

nBlobSize
Określa limit rozmiaru obiektu blOB.

Uwagi

Ustawia maksymalny rozmiar obiektu BLOB w bajtach; dane kolumny większe niż ta wartość są traktowane jako obiekt BLOB. Niektórzy dostawcy zapewniają bardzo duże rozmiary kolumn (np. 2 GB). Zamiast próbować przydzielić pamięć dla kolumny tego rozmiaru, zazwyczaj próbujesz powiązać te kolumny jako BLOB. W ten sposób nie trzeba przydzielać całej pamięci, ale nadal można odczytywać wszystkie dane bez obawy przed obcięciem. Istnieje jednak kilka przypadków, w których warto wymusić CDynamicAccessor powiązanie dużych kolumn w ich natywnych typach danych. Aby to zrobić, przed wywołaniem metody wywołaj metodę SetBlobSizeLimit Open.

Metoda konstruktora CDynamicAccessor ustawia maksymalny rozmiar obiektu BLOB na wartość domyślną 8000 bajtów.

CDynamicAccessor::SetLength

Ustawia długość określonej kolumny.

Składnia

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

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

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

Parametry

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

nLength
[in] Długość kolumny w bajtach.

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

Wartość zwracana

Zwraca wartość true , jeśli określona długość kolumny została pomyślnie ustawiona. W przeciwnym razie ta funkcja zwraca wartość false.

CDynamicAccessor::SetStatus

Ustawia stan określonej kolumny.

Składnia

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

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

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

Parametry

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

status
[in] Stan kolumny. Aby uzyskać więcej informacji, zobacz DBSTATUS w dokumentacji programisty OLE DB.

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

Wartość zwracana

Zwraca wartość true , jeśli określony stan kolumny został ustawiony pomyślnie. W przeciwnym razie ta funkcja zwraca wartość false.

CDynamicAccessor::SetValue

Przechowuje dane w określonej kolumnie.

Składnia

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
[in] Szablonowy parametr obsługujący dowolny typ danych z wyjątkiem typów ciągów (CHAR*, WCHAR*), które wymagają specjalnej obsługi. GetValue używa odpowiedniego typu danych na podstawie tego, co określisz tutaj.

pColumnName
[in] Wskaźnik do ciągu znaków zawierającego nazwę kolumny.

data
[in] Wskaźnik do pamięci zawierającej dane.

nKolumn
[in] Numer kolumny. Numery kolumn zaczynają się od 1. Wartość 0 odnosi się do kolumny zakładki, jeśli istnieje.

Wartość zwracana

Jeśli chcesz ustawić dane ciągu, użyj nieplatanych wersji programu GetValue. Wersje nieplated tej metody zwracają wartość void*, która wskazuje część buforu, która zawiera określone dane kolumny. Zwraca wartość NULL, jeśli nie znaleziono kolumny.

W przypadku wszystkich innych typów danych łatwiej jest użyć szablonowych wersji programu GetValue. Wersje szablonów zwracają true powodzenie lub false niepowodzenie.

Zobacz też

Szablony konsumentów OLE DB
Szablony konsumentów OLE DB — dokumentacja
CAccessor, klasa
CDynamicParameterAccessor, klasa
CManualAccessor, klasa