Partager via


Récupération de métadonnées à l'aide de jeux de lignes du schéma

Vous avez parfois besoin d'obtenir des informations sur le fournisseur, un ensemble de lignes, une table, des colonnes ou d'autres informations de base de données sans ouvrir l'ensemble de lignes. Les données relatives à la structure de base de données s'appellent des métadonnées et peuvent être récupérées par différentes méthodes. L'une d'elles consiste à utiliser des ensembles de lignes de schéma.

Les modèles OLE DB fournissent un ensemble de classes pour récupérer des informations de schéma ; ces classes créent des ensembles de lignes de schéma prédéfinis et sont répertoriés dans les classes d’ensembles de lignes de schéma et les classes Typedef.

Remarque

Si vous utilisez OLAP et que certains de vos ensembles de lignes ne sont pas pris en charge par les classes d'ensembles de lignes de schéma (par exemple, si vous avez un nombre variable de colonnes), envisagez d'utiliser CManualAccessor ou CDynamicAccessor. Vous pouvez parcourir les colonnes et utiliser des instructions case pour gérer les types de données possibles de chaque colonne.

Modèle catalogue/schéma

SQL ANSI définit un modèle catalogue/schéma pour les magasins de données ; OLE DB utilise ce modèle. Dans ce modèle, les catalogues (bases de données) ont des schémas et des schémas ont des tables.

  • Catalogue A catalogue est un autre nom pour une base de données. Il s’agit d’une collection de schémas connexes. Pour répertorier les catalogues (bases de données) appartenant à une source de données donnée, utilisez CCatalog. Étant donné que de nombreuses bases de données n’ont qu’un seul catalogue, les métadonnées sont parfois appelées informations de schéma.

  • Le schéma A est une collection d’objets de base de données appartenant ou ayant été créés par un utilisateur particulier. Pour répertorier les schémas appartenant à un utilisateur donné, utilisez CSchemata.

    Dans les termes Microsoft SQL Server et ODBC 2.x, un schéma est propriétaire (par exemple, dbo est un nom de schéma classique). En outre, SQL Server stocke les métadonnées dans un ensemble de tables : une table contient une liste de toutes les tables et une autre table contient une liste de toutes les colonnes. Il n’existe aucun équivalent à un schéma dans une base de données Microsoft Access.

  • Les tables de tables sont des collections de colonnes organisées dans des ordres spécifiques. Pour répertorier les tables définies dans un catalogue donné (base de données) et des informations sur ces tables, utilisez les tables CTables.

Restrictions

Lorsque vous interrogez des informations de schéma, vous pouvez utiliser des restrictions pour spécifier le type d’informations qui vous intéresse. Les restrictions s'apparentent à un filtre ou à un qualificateur de requête. Par exemple, dans la requête suivante :

SELECT * FROM authors WHERE l_name = 'pivo'

l_name est une restriction. Il s’agit d’un exemple simple avec une seule restriction ; les classes d’ensembles de lignes de schéma prennent en charge plusieurs restrictions.

Les classes typedef d’ensemble de lignes de schéma encapsulent tous les ensembles de lignes de schéma OLE DB afin que vous puissiez accéder à un ensemble de lignes de schéma comme n’importe quel autre ensemble de lignes en instanciant et en l’ouvrant. Par exemple, la classe typedef CColumns est définie comme suit :

CRestrictions<CAccessor<CColumnsInfo>

La classe CRestrictions fournit la prise en charge des restrictions. Après avoir créé une instance de l’ensemble de lignes de schéma, appelez CRestrictions ::Open. Cette méthode retourne un jeu de résultats basé sur les restrictions que vous spécifiez.

Pour spécifier des restrictions, reportez-vous à l’annexe B : Ensembles de lignes de schéma et recherchez l’ensemble de lignes que vous utilisez. Par exemple, CColumns correspond à l’ensemble de lignes COLUMNS ; cette rubrique répertorie les colonnes de restriction dans l’ensemble de lignes COLUMNS : TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Vous devez suivre cet ordre quand vous spécifiez vos restrictions.

Par exemple, si vous souhaitez restreindre par nom de table, TABLE_NAME est la troisième colonne de restriction, puis appelez Open, en spécifiant le nom de table souhaité comme troisième paramètre de restriction, comme illustré dans l’exemple suivant.

Pour utiliser des ensembles de lignes de schéma

  1. Incluez également le fichier d’en-tête Atldbsch.h (vous devez Atldbcli.h également prendre en charge le consommateur).

  2. Instanciez un objet ensemble de lignes de schéma dans le fichier d'en-tête du consommateur ou du document. Si vous souhaitez obtenir des informations sur la table, déclarez un CTables objet ; si vous souhaitez des informations de colonne, déclarez un CColumns objet. Cet exemple montre comment récupérer les colonnes de la table « authors » :

    CDataSource ds;
    ds.Open();
    CSession ss;
    ss.Open(ds);
    CColumns columnSchemaRowset;
    // TABLE_NAME is the third restriction column, so
    // specify "authors" as the third restriction parameter:
    HRESULT hr = columnSchemaRowset.Open(ss, NULL, NULL, L"authors");
    hr = columnSchemaRowset.MoveFirst();
    while (hr == S_OK)
    {
       hr = columnSchemaRowset.MoveNext();
    }
    
  3. Pour récupérer les informations, accédez au membre de données approprié de l’objet ensemble de lignes de schéma, par exemple, ColumnSchemaRowset.m_szColumnName. Ce membre de données correspond à COLUMN_NAME. Pour voir la colonne OLE DB à laquelle correspond chaque membre de données, consultez CColumns.

Pour obtenir la référence de l’ensemble de lignes de schéma, les classes typedef fournies dans les modèles OLE DB (consultez Classes d’ensembles de lignes de schéma et classes Typedef).

Pour plus d’informations sur les ensembles de lignes de schéma OLE DB, y compris les colonnes de restriction, consultez l’annexe B : Ensembles de lignes de schéma dans la référence du programmeur OLE DB.

Pour obtenir des exemples plus complexes d’utilisation des classes d’ensemble de lignes de schéma, consultez les exemples CatDB et DBViewer .

Pour plus d’informations sur la prise en charge du fournisseur pour les ensembles de lignes de schéma, consultez Prise en charge des ensembles de lignes de schéma.

Voir aussi

Utilisation des accesseurs