Registros de usuário
Para usar um acessador estático (isto é, um acessador derivado de CAccessor), o consumidor deve ter um registro de usuário.O registro de usuário é uma classe C++ que contém elementos de dados para o identificador de entrada ou saída.O ATL OLE DB consumidor assistente gera um registro de usuário para o consumidor.Você pode adicionar métodos para o registro de usuário para tarefas opcionais como manipulação de comandos.
O código a seguir mostra um registro de exemplo que manipula os comandos.No registro do usuário, BEGIN_COLUMN_MAP representa um conjunto de linhas de dados passado para o consumidor de um provedor.BEGIN_PARAM_MAPrepresenta um conjunto de parâmetros de comando.Este exemplo usa um CCommand classe para manipular os parâmetros de comando.Os membros de dados nas entradas de mapa representam deslocamentos em um bloco contíguo de memória para cada instância da classe.O COLUMN_ENTRY macros correspondem do PROVIDER_COLUMN_ENTRY macros no lado do provedor.
Para obter mais informações sobre o COLUMN_MAP e PARAM_MAP macros, consulte Macros para OLE DB consumidor modelos de.
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()
};
Registros de usuário gerada pelo Assistente
Se você usar a ATL OLE DB consumidor Assistente para gerar um consumidor, você tem a opção de usar modelos OLE DB ou atributos do OLE DB.O código gerado é diferente em cada caso.Para obter mais informações sobre este código, consulte Classes de Consumer Wizard-Generated.
Suporte de registro de usuário para vários assessores
Para obter uma discussão detalhada sobre os cenários em que você precisa usar vários assessores, consulte Usando vários assessores em um conjunto de linhas.
O exemplo a seguir mostra o registro de usuário modificado para oferecer suporte a vários assessores no conjunto de linhas.Em vez de BEGIN_COLUMN_MAP e END_COLUMN_MAP, ele usa BEGIN_ACCESSOR_MAP e BEGIN_ACCESSOR para cada acessador.O BEGIN_ACCESSOR macro Especifica o número de acessador (deslocamento de zero) e se o acessador é um autoaccessor.Chamada de Autoaccessors GetData para recuperar dados automaticamente em uma chamada para MoveNext.Acessadores nonautomatic exigem que você explicitamente recuperar os dados.Use um acessador nonautomatic se você estiver vinculando a um campo de dados grandes (como uma imagem de bitmap) que não deseja recuperar para cada registro.
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()
};