CDynamicAccessor (Clase)

Permite acceder a un origen de datos cuando se desconoce el esquema de la base de datos (estructura subyacente de la base de datos).

Sintaxis

class CDynamicAccessor : public CAccessorBase

Requisitos

Encabezado: atldbcli.h

Miembros

Métodos

Nombre Descripción
AddBindEntry Agrega una entrada de enlace a las columnas de salida al invalidar el descriptor de acceso predeterminado.
CDynamicAccessor Crea instancias e inicializa el objeto CDynamicAccessor.
Cerrar Desenlaza todas las columnas, libera la memoria asignada y libera el puntero de interfaz IAccessor de la clase.
GetBlobHandling Recupera el valor de control de BLOB de la fila actual.
GetBlobSizeLimit Recupera el tamaño máximo del BLOB en bytes.
GetBookmark Recupera el marcador de la fila actual.
GetColumnCount Recupera el número de columnas del conjunto de filas.
GetColumnFlags Recupera las características de la columna.
GetColumnInfo Recupera los metadatos de columna.
GetColumnName Recupera el nombre de una columna especificada.
GetColumnType Recupera el tipo de datos de una columna especificada.
GetLength Recupera la longitud máxima posible de una columna en bytes.
GetOrdinal Recupera el índice de columna dado un nombre de columna.
GetStatus Recupera el estado de una columna especificada.
GetValue Recupera los datos del búfer.
SetBlobHandling Establece el valor de control de BLOB de la fila actual.
SetBlobSizeLimit Establece el tamaño máximo del BLOB en bytes.
SetLength Establece la longitud de la columna en bytes.
SetStatus Establece el estado de una columna especificada.
SetValue Almacena los datos en el búfer.

Comentarios

Use los métodos de CDynamicAccessor para obtener información de columna, como nombres de columna, recuento de columnas, tipo de datos, etc. A continuación, esta información de columna se usa para crear un descriptor de acceso dinámicamente en tiempo de ejecución.

La información de columna se almacena en un búfer creado y administrado por esta clase. Para obtener datos del búfer, use el método GetValue.

Para obtener una explicación y ejemplos de uso de las clases de descriptor de acceso dinámico, consulte Uso de descriptores de acceso dinámicos.

CDynamicAccessor::AddBindEntry

Agrega una entrada de enlace a las columnas de salida.

Sintaxis

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

Parámetros

info
[in] Estructura DBCOLUMNINFO que contiene información de columna. Consulte "Estructuras DBCOLUMNINFO" en IColumnsInfo::GetColumnInfo en la Referencia del programador de OLE DB.

Valor devuelto

Uno de los valores HRESULT estándar.

Comentarios

Use este método al invalidar el descriptor de acceso predeterminado creado con CDynamicAccessor (consulte Recuperación de datos).

CDynamicAccessor::CDynamicAccessor

Crea instancias e inicializa el objeto CDynamicAccessor.

Sintaxis

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

Parámetros

eBlobHandling
Especifica cómo se van a controlar los datos de objetos binarios grandes (BLOB). El valor predeterminado es DBBLOBHANDLING_DEFAULT. Consulte SetBlobHandling para ver una descripción de los valores DBBLOBHANDLINGENUM.

nBlobSize
Tamaño máximo del BLOB en bytes; los datos de columna por encima de este valor se tratan como un BLOB. El valor predeterminado es 8000. Consulte SetBlobSizeLimit para obtener más información.

Comentarios

Si usa el constructor para inicializar el objeto CDynamicAccessor, puede especificar cómo enlazará los blobs. Los blobs pueden contener datos binarios, como gráficos, sonidos o código compilado. El comportamiento predeterminado es tratar las columnas de más de 8000 bytes como blobs e intentar enlazarlas a un objeto ISequentialStream. Sin embargo, puede especificar otro valor como tamaño del BLOB.

También puede especificar cómo controla CDynamicAccessor los datos de columna que se califican como datos de BLOB: puede controlar los datos de BLOB de la manera predeterminada, puede omitir (no enlazar) los datos de BLOB o puede enlazar los datos de BLOB en la memoria asignada por el proveedor.

CDynamicAccessor::Close

Desenlaza todas las columnas, libera la memoria asignada y libera el puntero de interfaz IAccessor de la clase.

Sintaxis

void Close() throw();

CDynamicAccessor::GetBlobHandling

Recupera el valor de control de BLOB de la fila actual.

Sintaxis

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Comentarios

Devuelve el valor de control de BLOB eBlobHandling establecido por SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Recupera el tamaño máximo del BLOB en bytes.

Sintaxis

const DBLENGTH GetBlobSizeLimit() const;

Comentarios

Devuelve el valor de control de BLOB nBlobSize establecido por SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Recupera el marcador de la fila actual.

Sintaxis

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

Parámetros

pBookmark
[out] Puntero al objeto CBookmark.

Valor devuelto

Uno de los valores HRESULT estándar.

Comentarios

Debe establecer DBPROP_IRowsetLocate en VARIANT_TRUE para recuperar un marcador.

CDynamicAccessor::GetColumnCount

Recupera el número de columnas.

Sintaxis

DBORDINAL GetColumnCount() const throw();

Valor devuelto

Número de columnas recuperadas.

CDynamicAccessor::GetColumnFlags

Recupera las características de la columna.

Sintaxis

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

Parámetros

nColumn
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

pFlags
[out] Puntero a una máscara de bits que describe las características de la columna. Consulte "Tipo de enumeración DBCOLUMNFLAGS" en IColumnsInfo::GetColumnInfo en la Referencia del programador de OLE DB.

Valor devuelto

Devuelve true si se recuperan correctamente las características de la columna. De lo contrario, devuelve false.

Comentarios

El número de columna es el desplazamiento desde uno. La columna cero es un caso especial; es el marcador si está disponible.

CDynamicAccessor::GetColumnInfo

Devuelve los metadatos de columna necesarios para la mayoría de los consumidores.

Sintaxis

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

Parámetros

pRowset
[in] Puntero a la interfaz IRowset.

pColumns
[out] Puntero a la memoria en la que se va a devolver el número de columnas del conjunto de filas; este número incluye la columna de marcador, si la hay.

ppColumnInfo
[out] Puntero a la memoria en la que se va a devolver una matriz de estructuras DBCOLUMNINFO. Consulte "Estructuras DBCOLUMNINFO" en IColumnsInfo::GetColumnInfo en la Referencia del programador de OLE DB.

ppStringsBuffer
[out] Puntero a la memoria en la que se va a devolver un puntero al almacenamiento de todos los valores de cadena (nombres utilizados en columnid o de pwszName) en un bloque de asignación único.

Valor devuelto

Uno de los valores HRESULT estándar.

Comentarios

Consulte IColumnsInfo::GetColumnInfo en la Referencia del programador de OLE DB para obtener información sobre los tipos de datos DBORDINAL, DBCOLUMNINFO y OLECHAR.

CDynamicAccessor::GetColumnName

Recupera el nombre de la columna especificada.

Sintaxis

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parámetros

nColumn
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

Valor devuelto

El nombre de la columna especificada.

CDynamicAccessor::GetColumnType

Recupera el tipo de datos de una columna especificada.

Sintaxis

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

Parámetros

nColumn
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

pType
[out] Puntero al tipo de datos de la columna especificada.

Valor devuelto

Devuelve true si la operación se realiza correctamente; de lo contrario, devuelve false.

CDynamicAccessor::GetLength

Recupera la longitud de la columna especificada.

Sintaxis

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
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

pLength
[out] Puntero al entero que contiene la longitud de la columna en bytes.

Valor devuelto

Devuelve true si se encuentra la columna especificada. De lo contrario, esta función devuelve false.

Comentarios

La primera invalidación toma el número de columna y las invalidaciones segunda y tercera toman el nombre de columna en formato ANSI e Unicode, respectivamente.

CDynamicAccessor::GetOrdinal

Recupera el número de columna dado un nombre de columna.

Sintaxis

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

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

Parámetros

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

pOrdinal
[out] Puntero al número de columna.

Valor devuelto

Devuelve true si se encuentra una columna con el nombre especificado. De lo contrario, esta función devuelve false.

CDynamicAccessor::GetStatus

Recupera el estado de la columna especificada.

Sintaxis

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] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

pStatus
[out] Puntero a la variable que contiene el estado de la columna. Consulte DBSTATUS en la Referencia del programador de OLE DB para obtener más información.

Valor devuelto

Devuelve true si se encuentra la columna especificada. De lo contrario, esta función devuelve false.

CDynamicAccessor::GetValue

Recupera los datos de una columna especificada.

Sintaxis

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] Parámetro con plantilla que controla cualquier tipo de datos, excepto los tipos de cadena (CHAR* y WCHAR*), que requieren un control especial. GetValue usa el tipo de datos adecuado en función de lo que especifique aquí.

nColumn
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

pColumnName
[in] Nombre de la columna.

pData
[out] Puntero al contenido de la columna especificada.

Valor devuelto

Si desea pasar datos de cadena, use las versiones sin plantilla de GetValue. Las versiones sin plantilla de este método devuelven void*, que apunta a la parte del búfer que contiene los datos de la columna especificada. Devuelve NULL si no se encuentra la columna.

Para todos los demás tipos de datos, es más sencillo usar las versiones con plantilla de GetValue. Las versiones con plantilla devuelven true si se ejecuta correctamente o false si se produce un error.

Comentarios

Use las versiones sin plantilla para devolver columnas que contienen cadenas y las versiones con plantilla para las columnas que contienen otros tipos de datos.

En el modo de depuración, obtendrá una aserción si el tamaño de pData no es igual al tamaño de la columna a la que apunta.

CDynamicAccessor::SetBlobHandling

Establece el valor de control de BLOB de la fila actual.

Sintaxis

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parámetros

eBlobHandling
Especifica cómo se van a controlar los datos de BLOB. Puede tomar los siguientes valores:

  • DBBLOBHANDLING_DEFAULT: controlar los datos de columna mayores que nBlobSize (establecido por SetBlobSizeLimit) como datos de BLOB y recuperarlos mediante un objeto ISequentialStream o IStream. Esta opción intentará enlazar cada columna que contenga datos mayores que nBlobSize o enumerados como DBTYPE_IUNKNOWN como datos de BLOB.

  • DBBLOBHANDLING_NOSTREAMS: controlar los datos de columna mayores que nBlobSize (según lo establecido por SetBlobSizeLimit) como datos de BLOB y recuperarlos mediante la referencia en la memoria asignada por el proveedor y propiedad del consumidor. Esta opción es útil para las tablas que tienen más de una columna de BLOB y el proveedor solo admite un objeto ISequentialStream por cada descriptor de acceso.

  • DBBLOBHANDLING_SKIP: omitir (no enlazar) las columnas que se califican como que contienen blobs (el descriptor de acceso no enlazará ni recuperará el valor de la columna, pero seguirá recuperando el estado y la longitud de la columna).

Comentarios

Debe llamar a SetBlobHandling antes de llamar a Open.

El método del constructor CDynamicAccessor establece el valor de control de BLOB en DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Establece el tamaño máximo del BLOB en bytes.

Sintaxis

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parámetros

nBlobSize
Especifica el límite de tamaño del BLOB.

Comentarios

Establece el tamaño máximo de BLOB en bytes; los datos de columna por encima de este valor se tratan como un BLOB. Algunos proveedores proporcionan tamaños extremadamente grandes para las columnas (por ejemplo, 2 GB). En lugar de intentar asignar memoria para una columna de este tamaño, normalmente intentará enlazar estas columnas como blobs. De este modo, no tiene que asignar toda la memoria, pero todavía puede leer todos los datos sin temer un truncamiento. Sin embargo, hay algunos casos en los que es posible que desee forzar que CDynamicAccessor enlace las columnas grandes en sus tipos de datos nativos. Para ello, llame a SetBlobSizeLimit antes de llamar a Open.

El método del constructor CDynamicAccessor establece el tamaño máximo del BLOB en un valor predeterminado de 8000 bytes.

CDynamicAccessor::SetLength

Establece la longitud de la columna especificada.

Sintaxis

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] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

nLength
[in] Longitud de la columna en bytes.

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

Valor devuelto

Devuelve true si la longitud de la columna especificada se establece correctamente. De lo contrario, esta función devuelve false.

CDynamicAccessor::SetStatus

Establece el estado de la columna especificada.

Sintaxis

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] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

status
[in] Estado de la columna. Consulte DBSTATUS en la Referencia del programador de OLE DB para obtener más información.

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

Valor devuelto

Devuelve true si el estado de la columna especificada se establece correctamente. De lo contrario, esta función devuelve false.

CDynamicAccessor::SetValue

Almacena los datos en una columna especificada.

Sintaxis

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
[in] Parámetro con plantilla que controla cualquier tipo de datos, excepto los tipos de cadena (CHAR* y WCHAR*), que requieren un control especial. GetValue usa el tipo de datos adecuado en función de lo que especifique aquí.

pColumnName
[in] Puntero a una cadena de caracteres que contiene el nombre de la columna.

data
[in] Puntero a la memoria que contiene los datos.

nColumn
[in] Número de la columna. Los números de columna empiezan por 1. Un valor 0 hace referencia a la columna de marcador, si existe.

Valor devuelto

Si desea establecer datos de cadena, use las versiones sin plantilla de GetValue. Las versiones sin plantilla de este método devuelven void*, que apunta a la parte del búfer que contiene los datos de la columna especificada. Devuelve NULL si no se encuentra la columna.

Para todos los demás tipos de datos, es más sencillo usar las versiones con plantilla de GetValue. Las versiones con plantilla devuelven true si se ejecuta correctamente o false si se produce un error.

Consulte también

Plantillas de consumidor OLE DB
Referencia de plantillas de consumidor OLE DB
CAccessor (Clase)
CDynamicParameterAccessor (Clase)
CManualAccessor (Clase)