Enregistrement utilisateur
L'enregistrement utilisateur fournit le code et la structure de données représentant les données de colonne d'un jeu de lignes. Un enregistrement utilisateur peut être créé au moment de la compilation ou de l'exécution. Lorsque vous créez un fournisseur par l'intermédiaire de l'Assistant Fournisseur OLE DB ATL, l'Assistant crée un enregistrement utilisateur par défaut qui ressemble à celui-ci (à supposer que vous ayez spécifié un nom de fournisseur [nom court] « MyProvider ») :
class CWindowsFile:
public WIN32_FIND_DATA
{
public:
BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
};
Les modèles du fournisseur OLE DB gèrent toutes les particularités OLE DB concernant les interactions avec le client. Pour acquérir les données d'une colonne nécessaires pour une réponse, le fournisseur appelle la fonction GetColumnInfo, que vous devez placer dans l'enregistrement utilisateur. Vous pouvez substituer explicitement GetColumnInfo dans l'enregistrement utilisateur en la déclarant, par exemple, dans le fichier .h comme illustré ici :
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Ceci équivaut à :
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Vous devez également implémenter GetColumnInfo dans le fichier .cpp de l'enregistrement utilisateur.
Les macros PROVIDER_COLUMN_MAP facilitent la création d'une fonction GetColumnInfo :
BEGIN_PROVIDER_COLUMN_MAP définit le prototype de la fonction et un tableau statique de structures ATLCOLUMNINFO.
PROVIDER_COLUMN_ENTRY définit et initialise une structure ATLCOLUMNINFO unique.
END_PROVIDER_COLUMN_MAP ferme le tableau et la fonction. Elle place également le décompte des éléments du tableau dans le paramètre pcCols.
Quand un enregistrement utilisateur est créé au moment de l'exécution, GetColumnInfo utilise le paramètre pThis pour recevoir un pointeur désignant une instance de rowset ou de command. Les commandes et les jeux de lignes doivent prendre en charge l'interface IColumnsInfo, de façon que les informations des colonnes puissent être obtenues à partir de ce pointeur.
CommandClass et RowsetClass correspondent aux interfaces command et rowset qui utilisent l'enregistrement utilisateur.
Pour obtenir un exemple plus détaillé de la façon de substituer GetColumnInfo dans un enregistrement utilisateur, consultez Détermination de manière dynamique des colonnes retournées au consommateur.