Enregistrements utilisateur
Remarque
L’Assistant Consommateur OLE DB ATL n’est pas disponible dans Visual Studio 2019 et versions ultérieures. Vous pouvez toujours ajouter la fonctionnalité manuellement. Pour plus d’informations, consultez Création d’un consommateur sans utiliser l’Assistant.
Pour utiliser un accesseur statique (c’est-à-dire un accesseur dérivé de CAccessor
), le consommateur doit disposer d’un enregistrement utilisateur. L’enregistrement utilisateur est une classe C++ qui contient les éléments de données pour gérer les entrées-sorties. L’Assistant Consommateur OLE DB ATL génère un enregistrement utilisateur pour votre consommateur. Vous pouvez ajouter des méthodes à l’enregistrement utilisateur pour des tâches facultatives telles que la gestion des commandes.
Le code suivant montre un exemple d’enregistrement qui gère les commandes. Dans l’enregistrement utilisateur, BEGIN_COLUMN_MAP représente un ensemble de lignes de données passé au consommateur depuis un fournisseur. BEGIN_PARAM_MAP représente un ensemble de paramètres de commande. Cet exemple utilise une classe CCommand pour gérer les paramètres de commande. Les membres de données dans les entrées de mappage représentent des décalages dans un bloc contigu de mémoire pour chaque instance de la classe. Les macros COLUMN_ENTRY correspondent aux macros PROVIDER_COLUMN_ENTRY côté fournisseur.
Pour plus d’informations sur les macros COLUMN_MAP et PARAM_MAP, consultez Macros pour les modèles du consommateur OLE DB.
class CArtists
{
public:
// Data Elements
CHAR m_szFirstName[20];
CHAR m_szLastName[30];
short m_nAge;
// Column binding map
BEGIN_COLUMN_MAP(CArtists)
COLUMN_ENTRY(1, m_szFirstName)
COLUMN_ENTRY(2, m_szLastName)
COLUMN_ENTRY(3, m_nAge)
END_COLUMN_MAP()
// Parameter binding map
BEGIN_PARAM_MAP(CArtists)
COLUMN_ENTRY(1, m_nAge)
END_PARAM_MAP()
};
Enregistrements utilisateur générés par l’Assistant
Quand vous utilisez l’Assistant Consommateur OLE DB ATL pour générer un consommateur, vous pouvez utiliser soit des modèles OLE DB, soit des attributs OLE DB. Le code généré varie selon le cas. Pour plus d’informations sur ce code, consultez Classes de consommateur générées par l’Assistant.
Prise en charge des enregistrements utilisateur pour plusieurs accesseurs
Pour obtenir une présentation détaillée des scénarios dans lesquels vous auriez à utiliser plusieurs accesseurs, consultez Utilisation de plusieurs accesseurs dans un ensemble de lignes.
L’exemple suivant montre l’enregistrement utilisateur modifié pour prendre en charge plusieurs accesseurs dans l’ensemble de lignes. Au lieu de BEGIN_COLUMN_MAP et END_COLUMN_MAP, il utilise BEGIN_ACCESSOR_MAP et BEGIN_ACCESSOR pour chaque accesseur. La macro BEGIN_ACCESSOR spécifie le numéro de l’accesseur (décalage partant de zéro) et indique si l’accesseur est un auto-accesseur. Les auto-accesseurs appellent GetData
pour récupérer les données automatiquement via un appel à MoveNext. Les accesseurs non automatiques nécessitent que vous récupériez explicitement les données. Utilisez un accesseur non automatique si vous effectuez une liaison vers un champ de données de grande taille (par exemple, une image bitmap) que vous ne voulez pas récupérer pour chaque enregistrement.
class CMultiArtists
{
public:
// Data Elements
CHAR m_szFirstName[20];
CHAR m_szLastName[30];
short m_nAge;
// Column binding map
BEGIN_ACCESSOR_MAP(CMultiArtists, 2)
BEGIN_ACCESSOR(0, true) // true specifies an auto accessor
COLUMN_ENTRY(1, m_szFirstName)
COLUMN_ENTRY(2, m_szLastName)
END_ACCESSOR()
BEGIN_ACCESSOR(1, false) // false specifies a manual accessor
COLUMN_ENTRY(3, m_nAge)
END_ACCESSOR()
END_ACCESSOR_MAP()
};