Classe CDynamicAccessor

Permite que você acesse uma fonte de dados quando não tem nenhum conhecimento do esquema de banco (a estrutura subjacente do banco de dado).

Sintaxe

class CDynamicAccessor : public CAccessorBase

Requisitos

Cabeçalho: atldbcli. h

Membros

Métodos

Nome Descrição
AddBindEntry Adiciona uma entrada de associação às colunas de saída ao substituir o acessador padrão.
CDynamicAccessor Cria uma instância e inicializa o CDynamicAccessor objeto.
Close Desassocia todas as colunas, libera a memória alocada e libera o ponteiro de interface IAccessor na classe.
GetBlobHandling Recupera o valor de manipulação de BLOB para a linha atual.
GetBlobSizeLimit Recupera o tamanho máximo do BLOB em bytes.
GetBookmark Recupera o indicador para a linha atual.
Getnúmerodecolunas Recupera o número de colunas no conjunto de linhas.
GetColumnFlags Recupera as características da coluna.
GetColumnInfo Recupera os metadados da coluna.
GetColumnName Recupera o nome de uma coluna especificada.
GetColumnType Recupera o tipo de dados de uma coluna especificada.
GetLength Recupera o tamanho máximo possível de uma coluna em bytes.
GetOrdinal Recupera o índice de coluna dado um nome de coluna.
GetStatus Recupera o status de uma coluna especificada.
GetValue Recupera os dados do buffer.
SetBlobHandling Define o valor de manipulação de BLOB para a linha atual.
SetBlobSizeLimit Define o tamanho máximo do BLOB em bytes.
SetLength Define o comprimento da coluna em bytes.
SetStatus Define o status de uma coluna especificada.
SetValue Armazena os dados no buffer.

Comentários

Use CDynamicAccessor métodos para obter informações de coluna, como nomes de coluna, contagem de colunas, tipo de dados e assim por diante. Em seguida, você usa essas informações de coluna para criar um acessador dinamicamente em tempo de execução.

As informações de coluna são armazenadas em um buffer que é criado e gerenciado por essa classe. Obtenha dados do buffer usando GetValue.

Para obter uma discussão e exemplos de como usar as classes de acessador dinâmico, consulte usando acessadores dinâmicos.

CDynamicAccessor::AddBindEntry

Adiciona uma entrada de associação às colunas de saída.

Sintaxe

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

Parâmetros

info
no Uma estrutura que contém informações de DBCOLUMNINFO coluna. Consulte "estruturas DBCOLUMNINFO" em IColumnsInfo:: GetColumnInfo na referência do programador de OLE DB.

Valor Retornado

Um dos valores de HRESULT padrão.

Comentários

Use esse método ao substituir o acessador padrão criado com CDynamicAccessor (consulte como posso buscar dados?).

CDynamicAccessor::CDynamicAccessor

Cria uma instância e inicializa o CDynamicAccessor objeto.

Sintaxe

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

Parâmetros

eBlobHandling
Especifica como os dados do objeto binário grande (BLOB) serão manipulados. O valor padrão é DBBLOBHANDLING_DEFAULT. Consulte SetBlobHandling para obter uma descrição dos valores de DBBLOBHANDLINGENUM.

nBlobSize
O tamanho máximo do BLOB em bytes; os dados de coluna sobre esse valor são tratados como um BLOB. O valor padrão é 8.000. Consulte SetBlobSizeLimit para obter detalhes.

Comentários

Se você usar o construtor para inicializar o CDynamicAccessor objeto, será possível especificar como ele associará BLOBs. Os BLOBs podem conter dados binários, como gráficos, som ou código compilado. O comportamento padrão é tratar colunas com mais de 8.000 bytes como BLOBs e tentar associá-las a um ISequentialStream objeto. No entanto, você pode especificar um valor diferente para ser o tamanho do BLOB.

Você também pode especificar como o CDynamicAccessor trata os dados da coluna que se qualificam como dados de blob: ele pode manipular dados de BLOB da maneira padrão; ele pode ignorar (não associa) dados de BLOB; ou pode associar dados de blob na memória alocada pelo provedor.

CDynamicAccessor::Close

Desassocia todas as colunas, libera a memória alocada e libera o ponteiro de interface IAccessor na classe.

Syntax

void Close() throw();

CDynamicAccessor::GetBlobHandling

Recupera o valor de manipulação de BLOB para a linha atual.

Sintaxe

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Comentários

Retorna o valor de manipulação de BLOB eBlobHandling conforme definido por SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Recupera o tamanho máximo do BLOB em bytes.

Sintaxe

const DBLENGTH GetBlobSizeLimit() const;

Comentários

Retorna o valor de manipulação de BLOB nBlobSize conforme definido por SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Recupera o indicador para a linha atual.

Sintaxe

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

Parâmetros

pBookmark
fora Um ponteiro para o objeto CBookmark .

Valor Retornado

Um dos valores de HRESULT padrão.

Comentários

Você precisa definir DBPROP_IRowsetLocate como VARIANT_TRUE para recuperar um indicador.

CDynamicAccessor::GetColumnCount

Recupera o número de colunas.

Sintaxe

DBORDINAL GetColumnCount() const throw();

Valor retornado

O número de colunas recuperadas.

CDynamicAccessor::GetColumnFlags

Recupera as características da coluna.

Sintaxe

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

Parâmetros

nColumn
no O número da coluna. Os números de coluna começam com 1. Um valor de 0 se refere à coluna de indicador, se houver.

pFlags
fora Um ponteiro para uma bitmask que descreve as características da coluna. Consulte "DBCOLUMNFLAGS enumerated Type" em IColumnsInfo:: GetColumnInfo na referência do programador de OLE DB.

Valor Retornado

Retorna true se as características da coluna forem recuperadas com êxito. Caso contrário, ele retornará false.

Comentários

O número da coluna é deslocado de um. A coluna zero é um caso especial; é o indicador, se disponível.

CDynamicAccessor::GetColumnInfo

Retorna os metadados de coluna necessários para a maioria dos consumidores.

Sintaxe

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

Parâmetros

pRowset
no Um ponteiro para a interface IRowset .

pColumns
fora Um ponteiro para a memória na qual retornar o número de colunas no conjunto de linhas; Esse número inclui a coluna de indicadores, se houver uma.

ppColumnInfo
fora Um ponteiro para a memória na qual retornar uma matriz de DBCOLUMNINFO estruturas. Consulte "estruturas DBCOLUMNINFO" em IColumnsInfo:: GetColumnInfo na referência do programador de OLE DB.

ppStringsBuffer
fora Um ponteiro para a memória no qual retornar um ponteiro para o armazenamento para todos os valores de cadeia de caracteres (nomes usados dentro de columnid ou pwszName) em um único bloco de alocação.

Valor Retornado

Um dos valores de HRESULT padrão.

Comentários

Consulte IColumnsInfo:: GetColumnInfo na referência do programador de OLE DB para obter informações sobre os tipos DBORDINAL de dados, DBCOLUMNINFO e OLECHAR .

CDynamicAccessor::GetColumnName

Recupera o nome da coluna especificada.

Sintaxe

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parâmetros

nColumn
no O número da coluna. Os números de coluna começam com 1. Um valor de 0 se refere à coluna de indicador, se houver.

Valor Retornado

O nome da coluna especificada.

CDynamicAccessor::GetColumnType

Recupera o tipo de dados de uma coluna especificada.

Sintaxe

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

Parâmetros

nColumn
no O número da coluna. Os números de coluna começam com 1. Um valor de 0 se refere à coluna de indicador, se houver.

pType
fora Um ponteiro para o tipo de dados da coluna especificada.

Valor Retornado

Retorna true em caso de êxito ou false falha.

CDynamicAccessor::GetLength

Recupera o comprimento da coluna especificada.

Sintaxe

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

Parâmetros

nColumn
no O número da coluna. Os números de coluna começam com 1. Um valor de 0 se refere à coluna de indicador, se houver.

pColumnName
no Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

pLength
fora Um ponteiro para o inteiro que contém o comprimento da coluna em bytes.

Valor Retornado

Retorna true se a coluna especificada é encontrada. Caso contrário, essa função retornará false .

Comentários

A primeira substituição usa o número da coluna, e a segunda e terceira substitui o nome da coluna no formato ANSI ou Unicode, respectivamente.

CDynamicAccessor::GetOrdinal

Recupera o número da coluna de acordo com um nome de coluna.

Sintaxe

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

Parâmetros

pColumnName
no Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

pOrdinal
fora Um ponteiro para o número da coluna.

Valor Retornado

Retorna true se uma coluna com o nome especificado é encontrada. Caso contrário, essa função retornará false .

CDynamicAccessor::GetStatus

Recupera o status da coluna especificada.

Sintaxe

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

Parâmetros

nColumn
[in] O número da coluna. Os números de coluna começam com 1. Um valor de 0 refere-se à coluna de indicador, se for o caso.

pColumnName
[in] Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

pStatus
[out] Um ponteiro para a variável que contém o status da coluna. Consulte DBSTATUS na referência OLE DB programador de dados para obter mais informações.

Valor Retornado

Retornará true se a coluna especificada for encontrada. Caso contrário, essa função retornará false.

CDynamicAccessor::GetValue

Recupera os dados de uma coluna especificada.

Sintaxe

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

Parâmetros

ctype
[in] Um parâmetro modelo que manipula qualquer tipo de dados, exceto tipos de cadeia de caracteres (CHAR*, WCHAR*), que exigem tratamento especial. GetValue usa o tipo de dados apropriado com base no que você especificar aqui.

nColumn
[in] O número da coluna. Os números de coluna começam com 1. Um valor de 0 refere-se à coluna de indicador, se for o caso.

pColumnName
[in] O nome da coluna.

Pdata
[out] O ponteiro para o conteúdo da coluna especificada.

Valor Retornado

Se você quiser passar dados de cadeia de caracteres, use as versões não em forma de .GetValue As versões não emplapladas desse método retornam void*, que aponta para a parte do buffer que contém os dados de coluna especificados. Retornará NULL se a coluna não for encontrada.

Para todos os outros tipos de dados, é mais simples usar as versões modelo do GetValue. As versões modelo retornam true em caso de êxito ou false em caso de falha.

Comentários

Use as versões não em forma de modelo para retornar colunas que contêm cadeias de caracteres e as versões modelo para colunas que contêm outros tipos de dados.

No modo de depuração, você obterá uma declaração se o tamanho de pData for diferente do tamanho da coluna para a qual ele aponta.

CDynamicAccessor::SetBlobHandling

Define o valor de manipulação de BLOB para a linha atual.

Sintaxe

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parâmetros

eBlobHandling
Especifica como os dados BLOB devem ser tratados. Ele pode usar os seguintes valores:

  • DBBLOBHANDLING_DEFAULT: manipular dados de coluna maiores que nBlobSize ( SetBlobSizeLimitconforme definido por ) como dados BLOB e recuperá-los por meio de um ISequentialStream objeto ou IStream . Essa opção tentará vincular todas as colunas que contêm dados maiores que nBlobSize ou listados como DBTYPE_IUNKNOWN como dados BLOB.

  • DBBLOBHANDLING_NOSTREAMS: manipular dados de coluna maiores que nBlobSize ( SetBlobSizeLimitconforme definido por ) como dados BLOB e recuperá-los por meio de referência na memória de propriedade do consumidor alocada pelo provedor. Essa opção é útil para tabelas que têm mais de uma coluna BLOB e o provedor dá suporte a apenas um ISequentialStream objeto por acessador.

  • DBBLOBHANDLING_SKIP: ignorar (não vincular) colunas que se qualificam como blobs que contêm (o acessador não vinculará nem recuperará o valor da coluna, mas ainda recuperará o status e o comprimento da coluna).

Comentários

Você deve chamar SetBlobHandling antes de chamar Open.

O método do construtor CDynamicAccessor define o valor de manipulação de BLOB como DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Define o tamanho máximo do BLOB em bytes.

Sintaxe

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parâmetros

nBlobSize
Especifica o limite de tamanho do BLOB.

Comentários

Define o tamanho máximo do BLOB em bytes; dados de coluna maiores que esse valor são tratados como um BLOB. Alguns provedores dão tamanhos extremamente grandes para colunas (como 2 GB). Em vez de tentar alocar memória para uma coluna desse tamanho, normalmente você tentará vincular essas colunas como BLOBs. Dessa forma, você não precisa alocar toda a memória, mas ainda pode ler todos os dados sem medo de truncamento. No entanto, há alguns casos em que talvez você CDynamicAccessor queira forçar a vinculação de colunas grandes em seus tipos de dados nativos. Para fazer isso, chame antes SetBlobSizeLimit de chamar Open.

O método do construtor CDynamicAccessor define o tamanho máximo do BLOB para um valor padrão de 8.000 bytes.

CDynamicAccessor::SetLength

Define o comprimento da coluna especificada.

Sintaxe

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

Parâmetros

nColumn
[in] O número da coluna. Os números de coluna começam com 1. Um valor de 0 refere-se à coluna de indicador, se for o caso.

Nlength
[in] O comprimento da coluna em bytes.

pColumnName
[in] Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

Valor Retornado

Retornará true se o comprimento da coluna especificado for definido com êxito. Caso contrário, essa função retornará false.

CDynamicAccessor::SetStatus

Define o status da coluna especificada.

Sintaxe

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

Parâmetros

nColumn
[in] O número da coluna. Os números de coluna começam com 1. Um valor de 0 refere-se à coluna de indicador, se for o caso.

status
[in] O status da coluna. Consulte DBSTATUS na referência OLE DB programador de dados para obter mais informações.

pColumnName
[in] Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

Valor Retornado

Retornará true se o status da coluna especificada for definido com êxito. Caso contrário, essa função retornará false.

CDynamicAccessor::SetValue

Armazena dados em uma coluna especificada.

Sintaxe

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

Parâmetros

ctype
no Um parâmetro de modelo que manipula qualquer tipo de dados, exceto os tipos de cadeia de caracteres ( CHAR* , WCHAR* ), que exigem tratamento especial. GetValue usa o tipo de dados apropriado com base no que você especificar aqui.

pColumnName
no Um ponteiro para uma cadeia de caracteres que contém o nome da coluna.

data
no O ponteiro para a memória que contém os dados.

nColumn
no O número da coluna. Os números de coluna começam com 1. Um valor de 0 se refere à coluna de indicador, se houver.

Valor Retornado

Se você quiser definir dados de cadeia de caracteres, use as versões não modeladas do GetValue . As versões não modeladas desse método retornam void* , que aponta para a parte do buffer que contém os dados de coluna especificados. Retornará NULL se a coluna não for encontrada.

Para todos os outros tipos de dados, é mais simples usar as versões do modelo do GetValue . As versões do modelo retornam true em caso de êxito ou false em caso de falha.

Confira também

Modelos de consumidor OLE DB
Referência de modelos de consumidor OLE DB
Classe CAccessor
Classe CDynamicParameterAccessor
Classe CManualAccessor