Поделиться через


Записи пользователя

Обновлен: Ноябрь 2007

Чтобы воспользоваться классом статического доступа (то есть классом, производным от CAccessor), потребитель должен иметь запись пользователя. Запись пользователя — это класс C++, который содержит элементы данных для обработки ввода или вывода. Мастер потребителей OLE DB библиотеки ATL создает запись пользователя для поставщика. Можно добавить к записи пользователя дополнительные методы для решения второстепенных задач, например, обработки команд.

Ниже приведен пример записи, обрабатывающей команды. Макрос BEGIN_COLUMN_MAP в записи пользователя представляет набор строк данных, передаваемых потребителю от поставщика. Макрос BEGIN_PARAM_MAP представляет набор параметров команды. Для обработки параметров команды в этом примере используется класс CCommand. Члены данных в записях карты представляют собой смещения в одном непрерывном блоке памяти для каждого экземпляра класса. Макрос COLUMN_ENTRY соответствует макросу PROVIDER_COLUMN_ENTRY на стороне поставщика.

Дополнительные сведения о макросах COLUMN_MAP и PARAM_MAP см. в разделе Макросы для шаблонов потребителей OLE DB.

class CArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_COLUMN_MAP(CArtists)
   COLUMN_ENTRY(1, m_szFirstName)
   COLUMN_ENTRY(2, m_szLastName)
   COLUMN_ENTRY(3, m_nAge)
END_COLUMN_MAP()
 
// Parameter binding map
BEGIN_PARAM_MAP(CArtists)
   COLUMN_ENTRY(1, m_nAge)
END_PARAM_MAP()
};

Записи пользователя, созданные мастером

При использовании мастера потребителей OLE DB библиотеки ATL для создания потребителя существует выбор — применять шаблоны OLE DB или атрибуты OLE DB. Генерируемый код будет отличаться в каждом случае. Дополнительные сведения об этом коде см. в разделе Классы потребителя, созданные мастером.

Поддержка записей пользователя для нескольких объектов доступа

Подробное рассмотрение сценариев, в которых необходимо использование нескольких объектов доступа, см. в разделе Использование нескольких объектов доступа к набору строк.

В следующем примере показана запись пользователя, измененная с целью поддержки использования нескольких объектов доступа к набору строк. Вместо макросов BEGIN_COLUMN_MAP и END_COLUMN_MAP для каждого объекта доступа используются макросы BEGIN_ACCESSOR_MAP и BEGIN_ACCESSOR. Макрос BEGIN_ACCESSOR указывает номер объекта доступа (начиная с нуля) и то, является ли объект доступа автоматическим. Автоматические объекты доступа при каждом вызове функции MoveNext вызывают функцию GetData для автоматического извлечения данных. Неавтоматические объекты доступа требуют явного извлечения данных. Использовать неавтоматические объекты доступа следует в тех случаях, если выполняется привязка к полю крупного размера (например, растровое изображение), которое было бы нежелательно извлекать для каждой записи.

class CMultiArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_ACCESSOR_MAP(CMultiArtists, 2)
   BEGIN_ACCESSOR(0, true)    // true specifies an auto accessor
    COLUMN_ENTRY(1, m_szFirstName)
    COLUMN_ENTRY(2, m_szLastName)
   END_ACCESSOR()
   BEGIN_ACCESSOR(1, false)   // false specifies a manual accessor
    COLUMN_ENTRY(3, m_nAge)
   END_ACCESSOR()
END_ACCESSOR_MAP()
};

См. также

Основные понятия

Шаблоны потребителей OLE DB (C++)