Класс 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.

Замечания

Дополнительные сведения о типах DBORDINALDBCOLUMNINFOOLECHARданных см. в статье 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