Partager via


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, falseest 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 DBORDINALde données , DBCOLUMNINFOet 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 ou IStream un ISequentialStream 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 seul ISequentialStream 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