Записи пользователя
Примечание.
Мастер объекта-получателя ATL OLE DB недоступен в Visual Studio 2019 и более поздних версиях. Эту функцию все еще можно добавить вручную. Дополнительные сведения см. в статье Creating a Consumer Without Using a Wizard (Создание объекта-получателя без помощи мастера).
Чтобы использовать статический метод доступа (т. е. метод доступа, полученный из CAccessor
), потребитель должен иметь запись пользователя. Запись пользователя — это класс C ++, который содержит элементы данных для обработки ввода или вывода. Мастер потребителя ATL OLE DB создает запись пользователя для вашего потребителя. Вы можете добавить методы в пользовательскую запись для дополнительных задач, таких как обработка команд.
Следующий код показывает пример записи, которая обрабатывает команды. В пользовательской записи BEGIN_COLUMN_MAP представляет набор строк данных, переданный потребителю от поставщика. BEGIN_PARAM_MAP представляет набор параметров команды. В этом примере для обработки параметров команды используется класс CCommand. Члены данных в записях карты представляют собой смещения в один непрерывный блок памяти для каждого экземпляра класса. Макросы COLUMN_ENTRY соответствуют макросам PROVIDER_COLUMN_ENTRY на стороне поставщика.
Дополнительные сведения о макросах COLUMN_MAP и PARAM_MAP см. в статье Macros for OLE DB Consumer Templates (Макросы и глобальные функции для шаблонов потребителей 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()
};
Записи пользователя, созданные мастером
При создании потребителя с помощью мастера потребителя ATL OLE DB вы можете выбрать использование шаблонов OLE DB или атрибутов OLE DB. Созданный код в каждом случае отличается. Дополнительные сведения об этом коде см. Consumer Wizard-Generated Classes (Классы, создаваемые мастером объекта-получателя).
Поддержка записей пользователя для нескольких методов доступа
Подробное описание сценариев, в которых нужно использовать несколько методов доступа, см. в статьеUsing Multiple Accessors on a Rowset (Использование нескольких методов доступа в наборе строк).
В следующем примере показана запись пользователя, измененная для поддержки нескольких методов доступа в наборе строк. Вместо BEGIN_COLUMN_MAP и END_COLUMN_MAP она использует BEGIN_ACCESSOR_MAP и BEGIN_ACCESSOR для каждого средства доступа. Макрос BEGIN_ACCESSOR указывает номер средства доступа (начиная от нуля) и указывает, является ли средство доступа автоматическим. Автоматические средства доступа вызывают GetData
для автоматического извлечения данных при вызове MoveNext. Неавтоматические средства доступа требуют явного извлечения данных. Используйте неавтоматический метод доступа для привязке к большому полю данных (например, к растровому изображению), которое вы не хотите получать для каждой записи.
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()
};