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 DBORDINAL
danych , DBCOLUMNINFO
i 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średnictwemISequentialStream
obiektu lubIStream
. 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
SetBlobSizeLimit
wartoś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 jedenISequentialStream
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