Condividi tramite


Recupero di metadati con i rowset dello schema

In alcuni casi è necessario recuperare informazioni sul provider, sul rowset, sulla tabella, sulle colonne e altre informazioni sul database senza aprire il rowset. I dati che riguardano la struttura del database vengono definiti metadati e possono essere recuperati tramite metodi diversi. Uno di essi consiste nell'utilizzare i rowset dello schema.

I modelli OLE DB includono un insieme di classi per recuperare le informazioni dello schema. Tali classi creano rowset dello schema già definiti e sono elencate in Classi dei rowset dello schema e classi typedef.

Nota

Se si utilizza OLAP e alcuni rowset non sono supportati dalle classi dei rowset dello schema, ad esempio nel caso in cui il numero delle colonne sia variabile, è necessario prendere in considerazione l'utilizzo di CManualAccessor o di CDynamicAccessor. È possibile spostarsi tra colonne e utilizzare istruzioni case per gestire i tipi di dati consentiti per ogni colonna.

Modello catalogo/schema

Per gli archivi dati, SQL ANSI definisce un modello catalogo/schema utilizzato da OLE DB. In questo modello i cataloghi (database) contengono gli schemi e gli schemi contengono le tabelle.

  • Catalogo   Nome alternativo per un database. Si tratta di un insieme di schemi correlati. Per elencare i cataloghi (database) appartenenti a una determinata origine dati, utilizzare CCatalog. Poiché molti database hanno un solo catalogo, i metadati vengono spesso definiti semplicemente informazioni dello schema.

  • Schema   Insieme di oggetti di database appartenenti a un determinato utente o creati dall'utente stesso. Per elencare gli schemi appartenenti a un determinato utente, utilizzare CSchemata.

    In Microsoft SQL Server e ODBC 2.x, uno schema corrisponde a un proprietario: dbo, ad esempio, è un nome di schema tipico. In SQL Server i metadati vengono inoltre memorizzati in un insieme di tabelle. Una tabella contiene un elenco di tutte le tabelle e un'altra un elenco di tutte le colonne. Non esiste un elemento equivalente allo schema nei database di Microsoft Access.

  • Tabella   Insieme di colonne disposte in base a un ordine specifico. Per elencare le tabelle definite in un determinato catalogo (database) con le relative informazioni, utilizzare CTables.

Restrizioni

Quando si esegue una query per reperire informazioni dello schema, è possibile utilizzare delle restrizioni per specificare il tipo di informazioni desiderato. Le restrizioni sono simili ai filtri o ai qualificatori di una query. Ad esempio, nella query:

SELECT * FROM authors where l_name = 'pivo'

l_name è una restrizione. Questo è un esempio molto semplice che include una sola restrizione, ma le classi dei rowset dello schema supportano l'uso di numerose restrizioni.

Poiché le classi typedef dei rowset dello schema includono tutti i rowset dello schema OLE DB, è possibile accedere a un rowset dello schema come se si trattasse di un qualsiasi altro rowset generando un'istanza e aprendola. Se, ad esempio, la classe typedef CColumns viene definita come segue:

CRestrictions<CAccessor<CColumnsInfo>

la classe CRestrictions fornirà il supporto per le restrizioni. Dopo avere creato un'istanza del rowset dello schema, chiamare CRestrictions::Open. Questo metodo restituisce un gruppo di risultati basato sulle restrizioni specificate.

Per specificare le restrizioni, vedere Appendix B: Schema Rowsets (informazioni in lingua inglese) e cercare il rowset in uso. CColumns, ad esempio, corrisponde al rowset COLUMNS. Nel relativo argomento sono elencate le colonne di restrizione del rowset COLUMNS, ovvero TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME e COLUMN_NAME. È necessario attenersi all'ordine indicato per specificare le restrizioni.

Pertanto, se si desidera ad esempio impostare una restrizione in base al nome di tabella, si tenga presente che TABLE_NAME è la terza colonna di restrizione. Quindi, chiamare Open specificando il nome di tabella desiderato come terzo parametro di restrizione, come indicato nell'esempio riportato di seguito.

Per utilizzare i rowset dello schema

  1. È necessario includere il file di intestazione Atldbsch.h. Naturalmente, è anche necessario Atldbcli.h per il supporto del consumer.

  2. Creare un'istanza di un oggetto rowset dello schema nel file di intestazione del consumer o del documento. Se si desidera recuperare informazioni di tabella, dichiarare un oggetto CTables, mentre, se si desidera ottenere informazioni di colonna, dichiarare un oggetto CColumns. In questo esempio viene descritto il recupero delle colonne della tabella authors:

    CDataSource ds;
    ds.Open();
    CSession ss;
    ss.Open();
    CColumns ColumnSchemaRowset;
    // TABLE_NAME is the third restriction column, so
    // specify "authors" as the third restriction parameter:
    hr = ColumnSchemaRowset.Open(ss, NULL, NULL, "authors");
    hr = ColumnSchemaRowset.MoveFirst();
    while (hr == S_OK)
    {
       hr = ColumnSchemaRowset.MoveNext();
    }
    
  3. Per recuperare le informazioni, accedere al membro dati appropriato dell'oggetto rowset dello schema, ad esempio ColumnSchemaRowset.m_szColumnName. Questo elemento corrisponde a COLUMN_NAME. Per controllare a quale colonna OLE DB corrisponde ciascun membro dati, vedere CColumns.

Per informazioni di riferimento sulle classi typedef disponibili nei modelli OLE DB, vedere Classi dei rowset dello schema e classi typedef.

Per ulteriori informazioni sui rowset dello schema OLE DB, incluse le colonne di restrizione, vedere Appendix B: Schema Rowsets in OLE DB Programmer's Reference (informazioni in lingua inglese).

Per esempi più complessi sull'utilizzo delle classi di rowset dello schema, vedere CatDB e DBViewer.

Per informazioni sul supporto del provider per i rowset dello schema, vedere Supporto dei rowset dello schema.

Vedere anche

Concetti

Utilizzo delle funzioni di accesso