CDynamicAccessor, classe
Vous permet d’accéder à une source de données quand vous n’avez aucune connaissance du schéma de base de données (structure sous-jacente de la base de données).
Syntaxe
class CDynamicAccessor : public CAccessorBase
Spécifications
En-tête : atldbcli.h
Membres
Méthodes
Nom | Description |
---|---|
AddBindEntry | Ajoute une entrée de liaison aux colonnes de sortie en remplaçant l’accesseur par défaut. |
CDynamicAccessor | Instancie et initialise l’objet CDynamicAccessor . |
Close | Annule la liaison de toutes les colonnes, libère la mémoire allouée et libère le pointeur d’interface IAccessor dans la classe. |
GetBlobHandling | Récupère la valeur de gestion d’objet BLOB pour la ligne active. |
GetBlobSizeLimit | Récupère la taille maximale d’objet BLOB en octets. |
GetBookmark | Récupère le signet de la ligne active. |
GetColumnCount | Récupère le nombre de colonnes dans l’ensemble de lignes. |
GetColumnFlags | Récupère les caractéristiques de colonne. |
GetColumnInfo | Récupère les métadonnées de colonne. |
GetColumnName | Récupère le nom d’une colonne spécifiée. |
GetColumnType | Récupère le type de données d’une colonne spécifiée. |
GetLength | Récupère la longueur maximale possible d’une colonne en octets. |
GetOrdinal | Récupère l’index de colonne en fonction d’un nom de colonne. |
GetStatus | Récupère l’état d’une colonne spécifiée. |
GetValue | Récupère les données de la mémoire tampon. |
SetBlobHandling | Définit la valeur de gestion d’objets blob pour la ligne active. |
SetBlobSizeLimit | Définit la taille d’objet BLOB maximale en octets. |
SetLength | Définit la longueur de la colonne en octets. |
SetStatus | Définit l’état d’une colonne spécifiée. |
SetValue | Stocke les données dans la mémoire tampon. |
Notes
Utilisez des CDynamicAccessor
méthodes pour obtenir des informations de colonne telles que les noms de colonnes, le nombre de colonnes, le type de données, etc. Vous utilisez ensuite ces informations de colonne pour créer un accesseur dynamiquement au moment de l’exécution.
Les informations de colonne sont stockées dans une mémoire tampon créée et gérée par cette classe. Obtenir des données à partir de la mémoire tampon à l’aide de GetValue.
Pour obtenir une discussion et des exemples d’utilisation des classes d’accesseur dynamique, consultez Utilisation des accesseurs dynamiques.
CDynamicAccessor::AddBindEntry
Ajoute une entrée de liaison aux colonnes de sortie.
Syntaxe
HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();
Paramètres
info
[in] Structure DBCOLUMNINFO
contenant des informations de colonne. Consultez « Structures DBCOLUMNINFO » dans IColumnsInfo ::GetColumnInfo dans la référence du programmeur OLE DB.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
Utilisez cette méthode lors de la substitution de l’accesseur par défaut créé avec CDynamicAccessor
(voir Comment extraire des données ?).
CDynamicAccessor::CDynamicAccessor
Instancie et initialise l’objet CDynamicAccessor
.
Syntaxe
CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
DBLENGTH nBlobSize = 8000);
Paramètres
eBlobHandling
Spécifie la façon dont les données d’objet volumineux binaire (BLOB) doivent être gérées. La valeur par défaut est DBBLOBHANDLING_DEFAULT. Consultez SetBlobHandling pour obtenir une description des valeurs DBBLOBHANDLANGEUM.
nBlobSize
Taille d’objet BLOB maximale en octets ; les données de colonne sur cette valeur sont traitées comme un objet BLOB. La valeur par défaut est 8 000. Pour plus d’informations, consultez SetBlobSizeLimit .
Notes
Si vous utilisez le constructeur pour initialiser l’objet CDynamicAccessor
, vous pouvez spécifier la façon dont il lie les objets blob. Les objets blob peuvent contenir des données binaires telles que des graphiques, du son ou du code compilé. Le comportement par défaut consiste à traiter les colonnes plus de 8 000 octets en tant que objets blob et à essayer de les lier à un ISequentialStream
objet. Toutefois, vous pouvez spécifier une valeur différente pour être la taille d’objet BLOB.
Vous pouvez également spécifier comment CDynamicAccessor
gérer les données de colonne qui sont qualifiées de données BLOB : il peut gérer les données BLOB de la manière par défaut ; il peut ignorer (ne lie pas) les données BLOB ; ou lier des données BLOB dans la mémoire allouée par le fournisseur.
CDynamicAccessor::Close
Annule la liaison de toutes les colonnes, libère la mémoire allouée et libère le pointeur d’interface IAccessor dans la classe.
Syntaxe
void Close() throw();
CDynamicAccessor::GetBlobHandling
Récupère la valeur de gestion d’objet BLOB pour la ligne active.
Syntaxe
const DBBLOBHANDLINGENUM GetBlobHandling() const;
Notes
Retourne la valeur de gestion blob eBlobHandling définie par SetBlobHandling.
CDynamicAccessor::GetBlobSizeLimit
Récupère la taille maximale d’objet BLOB en octets.
Syntaxe
const DBLENGTH GetBlobSizeLimit() const;
Notes
Retourne la valeur de gestion blob nBlobSize définie par SetBlobSizeLimit.
CDynamicAccessor::GetBookmark
Récupère le signet de la ligne active.
Syntaxe
HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();
Paramètres
pBookmark
[out] Pointeur vers l’objet CBookmark .
Valeur de retour
Une des valeurs HRESULT standard.
Notes
Vous devez définir DBPROP_IRowsetLocate
la valeur VARIANT_TRUE pour récupérer un signet.
CDynamicAccessor::GetColumnCount
Récupère le nombre de colonnes.
Syntaxe
DBORDINAL GetColumnCount() const throw();
Valeur de retour
Nombre de colonnes récupérées.
CDynamicAccessor::GetColumnFlags
Récupère les caractéristiques de colonne.
Syntaxe
bool GetColumnFlags(DBORDINAL nColumn,
DBCOLUMNFLAGS* pFlags) const throw();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
pFlags
[out] Pointeur vers un masque de bits qui décrit les caractéristiques de colonne. Consultez « TYPE ÉNUMÉRÉ DBCOLUMNFLAGS » dans IColumnsInfo ::GetColumnInfo dans la référence du programmeur OLE DB.
Valeur de retour
Retourne true
si les caractéristiques de colonne sont récupérées avec succès. Sinon, false
est retourné.
Notes
Le numéro de colonne est décalé d’un. La colonne zéro est un cas spécial ; il s’agit du signet s’il est disponible.
CDynamicAccessor::GetColumnInfo
Retourne les métadonnées de colonne nécessaires à la plupart des consommateurs.
Syntaxe
HRESULT GetColumnInfo(IRowset* pRowset,
DBORDINAL* pColumns,
DBCOLUMNINFO** ppColumnInfo,
OLECHAR** ppStringsBuffer) throw();
Paramètres
pRowset
[in] Pointeur vers l’interface IRowset .
pColumns
[out] Pointeur vers la mémoire dans lequel retourner le nombre de colonnes dans l’ensemble de lignes ; ce nombre inclut la colonne signet, s’il en existe un.
ppColumnInfo
[out] Pointeur vers la mémoire dans lequel retourner un tableau de DBCOLUMNINFO
structures. Consultez « Structures DBCOLUMNINFO » dans IColumnsInfo ::GetColumnInfo dans la référence du programmeur OLE DB.
ppStringsBuffer
[out] Pointeur vers la mémoire dans lequel retourner un pointeur vers le stockage pour toutes les valeurs de chaîne (noms utilisés dans columnid ou pwszName) dans un bloc d’allocation unique.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
Consultez IColumnsInfo ::GetColumnInfo dans la référence du programmeur OLE DB pour plus d’informations sur les types DBORDINAL
de données , DBCOLUMNINFO
et OLECHAR
.
CDynamicAccessor::GetColumnName
Récupère le nom de la colonne spécifiée.
Syntaxe
LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
Valeur de retour
Nom de la colonne spécifiée.
CDynamicAccessor::GetColumnType
Récupère le type de données d’une colonne spécifiée.
Syntaxe
bool GetColumnType(DBORDINAL nColumn,
DBTYPE* pType) const throw();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
pType
[out] Pointeur vers le type de données de la colonne spécifiée.
Valeur de retour
Retourne true
une valeur réussie ou false
en cas d’échec.
CDynamicAccessor::GetLength
Récupère la longueur de la colonne spécifiée.
Syntaxe
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();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
pLength
[out] Pointeur vers l’entier contenant la longueur de la colonne en octets.
Valeur de retour
Retourne true
si la colonne spécifiée est trouvée. Sinon, cette fonction retourne false
.
Notes
Le premier remplacement prend le numéro de colonne, et les deuxième et troisième remplacements prennent le nom de colonne au format ANSI ou Unicode, respectivement.
CDynamicAccessor::GetOrdinal
Récupère le numéro de colonne donné un nom de colonne.
Syntaxe
bool GetOrdinal(const CHAR* pColumnName,
DBORDINAL* pOrdinal) const throw();
bool GetOrdinal(const WCHAR* pColumnName,
DBORDINAL* pOrdinal) const throw();
Paramètres
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
pOrdinal
[out] Pointeur vers le numéro de colonne.
Valeur de retour
Retourne true
si une colonne portant le nom spécifié est trouvée. Sinon, cette fonction retourne false
.
CDynamicAccessor::GetStatus
Récupère l’état de la colonne spécifiée.
Syntaxe
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();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
pStatus
[out] Pointeur vers la variable contenant l’état de la colonne. Pour plus d’informations, consultez DBSTATUS dans la référence du programmeur OLE DB.
Valeur de retour
Retourne true
si la colonne spécifiée est trouvée. Sinon, cette fonction retourne false
.
CDynamicAccessor::GetValue
Récupère les données d’une colonne spécifiée.
Syntaxe
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();
Paramètres
ctype
[in] Paramètre modèle qui gère n’importe quel type de données, à l’exception des types de chaînes (CHAR*
, WCHAR*
), qui nécessitent une gestion spéciale. GetValue
utilise le type de données approprié en fonction de ce que vous spécifiez ici.
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
pColumnName
[in] Nom de la colonne.
pData
[out] Pointeur vers le contenu de la colonne spécifiée.
Valeur de retour
Si vous souhaitez transmettre des données de chaîne, utilisez les versions nontemplatées de GetValue
. Les versions nontemplatées de cette méthode retournent void*
, qui pointe vers la partie de la mémoire tampon qui contient les données de colonne spécifiées. Retourne NULL si la colonne est introuvable.
Pour tous les autres types de données, il est plus simple d’utiliser les versions modèles de GetValue
. Les versions mises en modèle retournent true
en cas de réussite ou false
d’échec.
Notes
Utilisez les versions nontemplatées pour retourner des colonnes qui contiennent des chaînes et les versions basées sur des modèles pour les colonnes qui contiennent d’autres types de données.
En mode débogage, vous obtiendrez une assertion si la taille de pData n’est pas égale à la taille de la colonne vers laquelle elle pointe.
CDynamicAccessor::SetBlobHandling
Définit la valeur de gestion d’objets blob pour la ligne active.
Syntaxe
bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);
Paramètres
eBlobHandling
Spécifie la façon dont les données BLOB doivent être gérées. Il peut avoir les valeurs suivantes :
DBBLOBHANDLING_DEFAULT : gérez les données de colonne supérieures à nBlobSize (définies par
SetBlobSizeLimit
) en tant que données BLOB et récupérez-les via un ouIStream
unISequentialStream
objet. Cette option tente de lier chaque colonne contenant des données supérieures à nBlobSize ou répertoriées comme DBTYPE_IUNKNOWN en tant que données BLOB.DBBLOBHANDLING_NOSTREAMS : gérez les données de colonne supérieures à nBlobSize (définies par
SetBlobSizeLimit
) en tant que données BLOB et récupérez-les par le biais de références dans la mémoire allouée par le fournisseur et appartenant au consommateur. Cette option est utile pour les tables qui ont plusieurs colonnes BLOB, et le fournisseur ne prend en charge qu’un seulISequentialStream
objet par accesseur.DBBLOBHANDLING_SKIP : ignorer (ne pas lier) les colonnes éligibles comme contenant des objets blob (l’accesseur ne lie pas ou récupère la valeur de colonne, mais elle récupère toujours l’état et la longueur de la colonne).
Notes
Vous devez appeler SetBlobHandling
avant d'appeler Open
.
La méthode de constructeur CDynamicAccessor définit la valeur de gestion d’objets blob sur DBBLOBHANDLING_DEFAULT.
CDynamicAccessor::SetBlobSizeLimit
Définit la taille d’objet BLOB maximale en octets.
Syntaxe
void SetBlobSizeLimit(DBLENGTH nBlobSize);
Paramètres
nBlobSize
Spécifie la limite de taille d’objet BLOB.
Notes
Définit la taille maximale d’objet BLOB en octets ; les données de colonne supérieures à cette valeur sont traitées comme un objet BLOB. Certains fournisseurs offrent des tailles extrêmement volumineuses pour les colonnes (par exemple, 2 Go). Au lieu de tenter d’allouer de la mémoire pour une colonne de cette taille, vous essayez généralement de lier ces colonnes en tant que objets blob. De cette façon, vous n’avez pas besoin d’allouer toute la mémoire, mais vous pouvez toujours lire toutes les données sans crainte de troncation. Toutefois, il existe certains cas dans lesquels vous souhaiterez peut-être forcer la liaison de colonnes volumineuses CDynamicAccessor
dans leurs types de données natifs. Pour ce faire, appelez SetBlobSizeLimit
avant d’appeler Open
.
La méthode de constructeur CDynamicAccessor définit la taille d’objet BLOB maximale sur une valeur par défaut de 8 000 octets.
CDynamicAccessor::SetLength
Définit la longueur de la colonne spécifiée.
Syntaxe
bool SetLength(DBORDINAL nColumn,
DBLENGTH nLength)throw();
bool SetLength(const CHAR* pColumnName,
DBLENGTH nLength) throw();
bool SetLength(const WCHAR* pColumnName,
DBLENGTH nLength) throw();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
nLength
[in] Longueur de la colonne en octets.
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
Valeur de retour
Retourne true
si la longueur de colonne spécifiée est définie correctement. Sinon, cette fonction retourne false
.
CDynamicAccessor::SetStatus
Définit l’état de la colonne spécifiée.
Syntaxe
bool SetStatus(DBORDINAL nColumn,
DBSTATUS status)throw();
bool SetStatus(const CHAR* pColumnName,
DBSTATUS status) throw();
bool SetStatus(const WCHAR* pColumnName,
DBSTATUS status) throw();
Paramètres
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
statut
[in] État de la colonne. Pour plus d’informations, consultez DBSTATUS dans la référence du programmeur OLE DB.
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
Valeur de retour
Retourne true
si l’état de colonne spécifié est défini avec succès. Sinon, cette fonction retourne false
.
CDynamicAccessor::SetValue
Stocke les données dans une colonne spécifiée.
Syntaxe
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( );
Paramètres
ctype
[in] Paramètre modèle qui gère n’importe quel type de données, à l’exception des types de chaînes (CHAR*
, WCHAR*
), qui nécessitent une gestion spéciale. GetValue
utilise le type de données approprié en fonction de ce que vous spécifiez ici.
pColumnName
[in] Pointeur vers une chaîne de caractères contenant le nom de colonne.
data
[in] Pointeur vers la mémoire contenant les données.
nColumn
[in] Numéro de colonne. Les numéros de colonne commencent par 1. La valeur 0 fait référence à la colonne signet, le cas échéant.
Valeur de retour
Si vous souhaitez définir des données de chaîne, utilisez les versions nontemplatées de GetValue
. Les versions nontemplatées de cette méthode retournent void*
, qui pointe vers la partie de la mémoire tampon qui contient les données de colonne spécifiées. Retourne NULL si la colonne est introuvable.
Pour tous les autres types de données, il est plus simple d’utiliser les versions modèles de GetValue
. Les versions mises en modèle retournent true
en cas de réussite ou false
d’échec.
Voir aussi
Modèles du consommateur OLE DB
Référence des modèles du consommateur OLE DB
CAccessor, classe
CDynamicParameterAccessor, classe
CManualAccessor, classe