Класс CDynamicAccessor
Позволяет получить доступ к источнику данных, если у вас нет знаний о схеме базы данных (базовая структура базы данных).
Синтаксис
class CDynamicAccessor : public CAccessorBase
Требования
Заголовок: atldbcli.h
Участники
Методы
Имя | Описание |
---|---|
AddBindEntry | Добавляет запись привязки к выходным столбцам при переопределении метода доступа по умолчанию. |
CDynamicAccessor | Создает экземпляр и инициализирует CDynamicAccessor объект. |
Закрыть | Отменяет привязку всех столбцов, освобождает выделенную память и освобождает указатель интерфейса IAccessor в классе. |
GetBlobHandling | Извлекает значение обработки BLOB для текущей строки. |
GetBlobSizeLimit | Извлекает максимальный размер BLOB-объектов в байтах. |
GetBookmark | Извлекает закладку для текущей строки. |
GetColumnCount | Извлекает количество столбцов в наборе строк. |
GetColumnFlags | Извлекает характеристики столбца. |
GetColumnInfo | Извлекает метаданные столбца. |
GetColumnName | Извлекает имя указанного столбца. |
GetColumnType | Извлекает тип данных указанного столбца. |
GetLength | Извлекает максимальную длину столбца в байтах. |
GetOrdinal | Извлекает индекс столбца с именем столбца. |
GetStatus | Извлекает состояние указанного столбца. |
GetValue | Извлекает данные из буфера. |
SetBlobHandling | Задает значение обработки BLOB для текущей строки. |
SetBlobSizeLimit | Задает максимальный размер BLOB-объектов в байтах. |
SetLength | Задает длину столбца в байтах. |
SetStatus | Задает состояние указанного столбца. |
SetValue | Хранит данные в буфере. |
Замечания
Используйте CDynamicAccessor
методы для получения сведений о столбцах, таких как имена столбцов, количество столбцов, тип данных и т. д. Затем эти сведения столбца используются для динамического создания метода доступа во время выполнения.
Сведения о столбце хранятся в буфере, который создается и управляется этим классом. Получение данных из буфера с помощью GetValue.
Обсуждение и примеры использования классов динамического доступа см. в разделе "Использование динамических accessors".
CDynamicAccessor::AddBindEntry
Добавляет запись привязки к выходным столбцам.
Синтаксис
HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();
Параметры
info
[in] Структура DBCOLUMNINFO
, содержащая сведения о столбцах. См. раздел "Структуры DBCOLUMNINFO" в IColumnsInfo::GetColumnInfo в справочнике программиста OLE DB.
Возвращаемое значение
Одно из стандартных значений HRESULT.
Замечания
Используйте этот метод при переопределении средства доступа по умолчанию, созданного с CDynamicAccessor
помощью (см. инструкции по выбору данных?).
CDynamicAccessor::CDynamicAccessor
Создает экземпляр и инициализирует CDynamicAccessor
объект.
Синтаксис
CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
DBLENGTH nBlobSize = 8000);
Параметры
eBlobHandling
Указывает, как обрабатываются данные больших двоичных объектов (BLOB). Значение по умолчанию — DBBLOBHANDLING_DEFAULT. Описание значений DBBLOBHANDLINGENUM см . в разделе SetBlobHandlingLINGUM .
nBlobSize
Максимальный размер BLOB-объектов в байтах; Данные столбцов по этому значению рассматриваются как BLOB-объект. Значение по умолчанию — 8000. Дополнительные сведения см. в разделе SetBlobSizeLimit .
Замечания
При использовании конструктора для инициализации CDynamicAccessor
объекта можно указать, как он привязывает БОЛЬШИЕ двоичные объекты. BLOB-объекты могут содержать двоичные данные, такие как графика, звук или скомпилированный код. Поведение по умолчанию заключается в том, чтобы обрабатывать столбцы более 8000 байт как BLOB-объекты и пытаться привязать их к объекту ISequentialStream
. Однако можно указать другое значение, которое должно быть размером BLOB.
Кроме того, можно указать способ CDynamicAccessor
обработки данных столбцов, которые квалифифиируются как данные BLOB: он может обрабатывать данные BLOB по умолчанию; он может пропускать (не привязывать) данные BLOB; или привязывать данные BLOB в выделенной поставщиком памяти.
CDynamicAccessor::Close
Отменяет привязку всех столбцов, освобождает выделенную память и освобождает указатель интерфейса IAccessor в классе.
Синтаксис
void Close() throw();
CDynamicAccessor::GetBlobHandling
Извлекает значение обработки BLOB для текущей строки.
Синтаксис
const DBBLOBHANDLINGENUM GetBlobHandling() const;
Замечания
Возвращает значение обработки BLOB eBlobHandling, заданное параметром SetBlobHandling.
CDynamicAccessor::GetBlobSizeLimit
Извлекает максимальный размер BLOB-объектов в байтах.
Синтаксис
const DBLENGTH GetBlobSizeLimit() const;
Замечания
Возвращает значение обработки BLOB-объектов nBlobSize , заданное параметром SetBlobSizeLimit.
CDynamicAccessor::GetBookmark
Извлекает закладку для текущей строки.
Синтаксис
HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();
Параметры
pBookmark
[out] Указатель на объект CBookmark .
Возвращаемое значение
Одно из стандартных значений HRESULT.
Замечания
Чтобы получить закладку, необходимо задать DBPROP_IRowsetLocate
значение VARIANT_TRUE.
CDynamicAccessor::GetColumnCount
Извлекает количество столбцов.
Синтаксис
DBORDINAL GetColumnCount() const throw();
Возвращаемое значение
Количество полученных столбцов.
CDynamicAccessor::GetColumnFlags
Извлекает характеристики столбца.
Синтаксис
bool GetColumnFlags(DBORDINAL nColumn,
DBCOLUMNFLAGS* pFlags) const throw();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
pFlags
[out] Указатель на битовую маску, описывающую характеристики столбца. См. раздел "Перечисленный тип DBCOLUMNFLAGS" в IColumnsInfo::GetColumnInfo в справочнике программиста OLE DB.
Возвращаемое значение
Возвращает, true
если характеристики столбца успешно извлекаются. В противном случае возвращается значение false
.
Замечания
Номер столбца смещение от одного. Ноль столбца — это особый случай; это закладка, если она доступна.
CDynamicAccessor::GetColumnInfo
Возвращает метаданные столбца, необходимые большинству потребителей.
Синтаксис
HRESULT GetColumnInfo(IRowset* pRowset,
DBORDINAL* pColumns,
DBCOLUMNINFO** ppColumnInfo,
OLECHAR** ppStringsBuffer) throw();
Параметры
pRowset
[in] Указатель на интерфейс IRowset .
pColumns
[out] Указатель на память, в которой возвращается количество столбцов в наборе строк; это число включает столбец закладки, если есть один.
ppColumnInfo
[out] Указатель на память, в которой возвращается массив DBCOLUMNINFO
структур. См. раздел "Структуры DBCOLUMNINFO" в IColumnsInfo::GetColumnInfo в справочнике программиста OLE DB.
ppStringsBuffer
[out] Указатель на память, в которой возвращается указатель на хранилище для всех строковых значений (имен, используемых в columnid или pwszName) в одном блоке выделения.
Возвращаемое значение
Одно из стандартных значений HRESULT.
Замечания
Дополнительные сведения о типах DBORDINAL
DBCOLUMNINFO
OLECHAR
данных см. в статье IColumnsInfo::GetColumnInfo в справочнике программиста OLE DB.
CDynamicAccessor::GetColumnName
Извлекает имя указанного столбца.
Синтаксис
LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
Возвращаемое значение
Имя заданного столбца.
CDynamicAccessor::GetColumnType
Извлекает тип данных указанного столбца.
Синтаксис
bool GetColumnType(DBORDINAL nColumn,
DBTYPE* pType) const throw();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
pType
[out] Указатель на тип данных указанного столбца.
Возвращаемое значение
Возвращает успешное выполнение или false
сбойtrue
.
CDynamicAccessor::GetLength
Извлекает длину указанного столбца.
Синтаксис
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();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
pLength
[out] Указатель на целое число, содержащее длину столбца в байтах.
Возвращаемое значение
Возвращает значение true
, если указанный столбец найден. В противном случае эта функция возвращается false
.
Замечания
Первая переопределение принимает номер столбца, а второй и третий переопределяют имя столбца в формате ANSI или Юникод соответственно.
CDynamicAccessor::GetOrdinal
Извлекает номер столбца с именем столбца.
Синтаксис
bool GetOrdinal(const CHAR* pColumnName,
DBORDINAL* pOrdinal) const throw();
bool GetOrdinal(const WCHAR* pColumnName,
DBORDINAL* pOrdinal) const throw();
Параметры
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
pOrdinal
[out] Указатель на номер столбца.
Возвращаемое значение
Возвращает значение true
, если столбец с указанным именем найден. В противном случае эта функция возвращается false
.
CDynamicAccessor::GetStatus
Извлекает состояние указанного столбца.
Синтаксис
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();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
pStatus
[out] Указатель на переменную, содержащую состояние столбца. Дополнительные сведения см. в справочнике программиста OLE DB.
Возвращаемое значение
Возвращает значение true
, если указанный столбец найден. В противном случае эта функция возвращается false
.
CDynamicAccessor::GetValue
Извлекает данные для указанного столбца.
Синтаксис
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();
Параметры
ctype
[in] Шаблонный параметр, обрабатывающий любой тип данных, кроме строковых типов (CHAR*
, WCHAR*
которые требуют специальной обработки). GetValue
использует соответствующий тип данных в зависимости от указанного здесь значения.
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
pColumnName
[in] Имя столбца.
pData
[out] Указатель на содержимое указанного столбца.
Возвращаемое значение
Если вы хотите передать строковые данные, используйте неуверенные версии GetValue
. Неуспеченные версии этого метода возвращаются void*
, что указывает на часть буфера, содержащую указанные данные столбца. Возвращает значение NULL, если столбец не найден.
Для всех других типов данных проще использовать шаблонные версии GetValue
. Шаблонные версии возвращаются true
при успешном выполнении или false
сбое.
Замечания
Используйте неуверенные версии для возврата столбцов, содержащих строки и шаблонные версии для столбцов, содержащих другие типы данных.
В режиме отладки вы получите утверждение, если размер pData не равен размеру столбца, к которому он указывает.
CDynamicAccessor::SetBlobHandling
Задает значение обработки BLOB для текущей строки.
Синтаксис
bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);
Параметры
eBlobHandling
Указывает способ обработки данных BLOB. Этот параметр может принимать перечисленные ниже значения.
DBBLOBHANDLING_DEFAULT. Обработка данных столбцов, размер которого превышает nBlobSize (как задано
SetBlobSizeLimit
по) в виде данных BLOB и извлекает их черезISequentialStream
объект илиIStream
объект. Этот параметр попытается привязать каждый столбец, содержащий данные, превышающие nBlobSize или указанный как DBTYPE_IUNKNOWN как данные BLOB.DBBLOBHANDLING_NOSTREAMS. Обработка данных столбцов больше nBlobSize (как задано
SetBlobSizeLimit
по) в виде данных BLOB и извлекает их с помощью ссылки в выделенной поставщиком памяти, принадлежащей потребителю. Этот параметр полезен для таблиц с несколькими столбцами BLOB, и поставщик поддерживает только одинISequentialStream
объект для каждого метода доступа.DBBLOBHANDLING_SKIP. Пропустить (не привязывать) столбцы, квалифицируясь как содержащие BLOB-объекты (метод доступа не привязывает или не извлекает значение столбца, но он по-прежнему получает состояние столбца и длину).
Замечания
Перед вызовом SetBlobHandling
следует вызвать метод Open
.
Метод конструктора CDynamicAccessor задает значение обработки BLOB-объектов для DBBLOBHANDLING_DEFAULT.
CDynamicAccessor::SetBlobSizeLimit
Задает максимальный размер BLOB-объектов в байтах.
Синтаксис
void SetBlobSizeLimit(DBLENGTH nBlobSize);
Параметры
nBlobSize
Указывает ограничение размера BLOB.
Замечания
Задает максимальный размер BLOB-объектов в байтах; Данные столбца, превышающие это значение, рассматриваются как БОЛЬШОЙ ДВОИЧНЫй объект. Некоторые поставщики предоставляют очень большие размеры для столбцов (например, 2 ГБ). Вместо того, чтобы попытаться выделить память для столбца этого размера, обычно вы попытаетесь привязать эти столбцы как BLOB-объекты. Таким образом, вам не нужно выделять всю память, но вы по-прежнему можете считывать все данные без страха усечения. Однако в некоторых случаях может потребоваться принудительно CDynamicAccessor
привязать большие столбцы в собственных типах данных. Для этого вызовите SetBlobSizeLimit
перед вызовом Open
.
Метод конструктора CDynamicAccessor задает максимальный размер BLOB-объектов по умолчанию размером 8 000 байт.
CDynamicAccessor::SetLength
Задает длину указанного столбца.
Синтаксис
bool SetLength(DBORDINAL nColumn,
DBLENGTH nLength)throw();
bool SetLength(const CHAR* pColumnName,
DBLENGTH nLength) throw();
bool SetLength(const WCHAR* pColumnName,
DBLENGTH nLength) throw();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
nLength
[in] Длина столбца в байтах.
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
Возвращаемое значение
Возвращает, true
если указанная длина столбца успешно задана. В противном случае эта функция возвращается false
.
CDynamicAccessor::SetStatus
Задает состояние указанного столбца.
Синтаксис
bool SetStatus(DBORDINAL nColumn,
DBSTATUS status)throw();
bool SetStatus(const CHAR* pColumnName,
DBSTATUS status) throw();
bool SetStatus(const WCHAR* pColumnName,
DBSTATUS status) throw();
Параметры
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
состояние
[in] Состояние столбца. Дополнительные сведения см. в справочнике программиста OLE DB.
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
Возвращаемое значение
Возвращает значение true
, если указанное состояние столбца установлено успешно. В противном случае эта функция возвращается false
.
CDynamicAccessor::SetValue
Сохраняет данные в указанном столбце.
Синтаксис
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( );
Параметры
ctype
[in] Шаблонный параметр, обрабатывающий любой тип данных, кроме строковых типов (CHAR*
, WCHAR*
которые требуют специальной обработки). GetValue
использует соответствующий тип данных в зависимости от указанного здесь значения.
pColumnName
[in] Указатель на символьную строку, содержащую имя столбца.
data
[in] Указатель на память, содержащую данные.
nColumn
[in] Номер столбца. Числа столбцов начинаются с 1. Значение 0 ссылается на столбец закладки, если таковой имеется.
Возвращаемое значение
Если вы хотите задать строковые данные, используйте неуверенные версии GetValue
. Неуспеченные версии этого метода возвращаются void*
, что указывает на часть буфера, содержащую указанные данные столбца. Возвращает значение NULL, если столбец не найден.
Для всех других типов данных проще использовать шаблонные версии GetValue
. Шаблонные версии возвращаются true
при успешном выполнении или false
сбое.
См. также
Шаблоны объекта-получателя OLE DB
Ссылка на шаблоны объекта-получателя OLE DB
Класс CAccessor
Класс CDynamicParameterAccessor
Класс CManualAccessor