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 (
SetBlobSizeLimit
conforme definido por ) como dados BLOB e recuperá-los por meio de umISequentialStream
objeto ouIStream
. 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 (
SetBlobSizeLimit
conforme 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 umISequentialStream
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