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 objetoISequentialStream
oIStream
. 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 objetoISequentialStream
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)