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


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

Примечание.

Мастер объекта-получателя 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()
};

См. также

Шаблоны объекта-получателя OLE DB