Partilhar via


Registros de usuário

Para usar um acessador estáticos (isto é, um acessador derivado de CAccessor), o consumidor deve ter um registro de usuário. O registro de usuário é a classe de criando c que contém elementos de dados para tratar a entrada ou a saída. O assistente do consumidor de ATL OLE DB gerencie um registro de usuário para o consumidor. Você pode adicionar métodos ao registro do usuário para tarefas opcionais como de manipulação.

O código a seguir mostra um registro de exemplo que trata comandos. No registro do usuário, BEGIN_COLUMN_MAP representa um conjunto de linhas de dados passado ao consumidor do provedor. BEGIN_PARAM_MAP representa um conjunto de parâmetros do comando. Este exemplo usa uma classe de CCommand para tratar os parâmetros de comando. Os membros de dados nas entradas do mapa representam deslocamentos em um bloco contínuo de memória para cada instância da classe. Macros de COLUMN_ENTRY correspondem a macros de PROVIDER_COLUMN_ENTRY no lado do provedor.

Para obter mais informações sobre macros de COLUMN_MAP e de PARAM_MAP , consulte Macros para modelos do consumidor 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()
};

Registros de usuário - gerados

Se você usar o assistente do consumidor de ATL OLE DB para gerar um consumidor, você tem a opção de usar modelos OLE DB ou atributos OLE DB. O código gerado é diferente em cada caso. Para obter mais informações sobre esse código, consulte Classes - gerados do consumidor.

Suporte do registro do usuário para vários acessadores

Para uma descrição detalhada dos cenários em que você precisa usar vários acessadores, consulte Usando vários acessadores em um conjunto de linhas.

O exemplo a seguir mostra o registro de usuário alterado para vários acessadores de suporte para o conjunto de linhas. Em vez de BEGIN_COLUMN_MAP e de END_COLUMN_MAP, use BEGIN_ACCESSOR_MAP e BEGIN_ACCESSOR para cada acessador. A macro de BEGIN_ACCESSOR especifica o número de acessador (deslocamento de zero) e se o acessador é um autoaccessor. Chame GetData de Autoaccessors para recuperar dados automaticamente em uma chamada para MoveNext. Os acessadores Nonautomatic exigem que você recuperar explicitamente os dados. Use um acessador nonautomatic se você estiver associando a um grande campo de dados (como uma imagem de bitmap) que você não queira 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()
};

Consulte também

Conceitos

Modelos de consumidor de banco de dados OLE (C++)