Recupero di metadati con i rowset dello schema
Talvolta è necessario ottenere informazioni sul provider, il set di righe, la tabella, le colonne o altre informazioni sul database senza aprire il set di righe. I dati sulla struttura del database sono chiamati metadati e possono essere recuperati con alcuni metodi diversi. Un metodo consiste nell'usare set di righe dello schema.
I modelli OLE DB forniscono un set di classi per recuperare le informazioni sullo schema; queste classi creano set di righe dello schema predefiniti e sono elencate in Classi set di righe dello schema e classi Typedef.
Nota
Se si usa OLAP e alcuni dei set di righe non sono supportati dalle classi per i set di righe dello schema, ad esempio se è presente un numero variabile di colonne, è consigliabile provare a usare CManualAccessor
o CDynamicAccessor
. È possibile scorrere verso il basso le colonne e usare istruzioni case per gestire i possibili tipi di dati per ogni colonna.
Modello di catalogo/schema
ANSI SQL definisce un modello di catalogo/schema per gli archivi dati, usato da OLE DB. In questo modello i cataloghi (database) hanno schemi e schemi con tabelle.
Catalogo Un catalogo è un altro nome per un database. Si tratta di una raccolta di schemi correlati. Per elencare i cataloghi (database) appartenenti a una determinata origine dati, usare CCatalog. Poiché molti database dispongono di un solo catalogo, i metadati vengono talvolta definiti informazioni sullo schema.
Schema Uno schema è una raccolta di oggetti di database di proprietà o creati da un utente specifico. Per elencare gli schemi di proprietà di un determinato utente, usare CSchemata.
Nei termini Microsoft SQL Server e ODBC 2.x uno schema è un proprietario, ad esempio dbo è un nome di schema tipico. INOLTRE, SQL Server archivia i metadati in un set di tabelle: una tabella contiene un elenco di tutte le tabelle e un'altra tabella contiene un elenco di tutte le colonne. Non esiste alcun equivalente a uno schema in un database di Microsoft Access.
Tabelle sono raccolte di colonne disposte in ordini specifici. Per elencare le tabelle definite in un determinato catalogo (database) e informazioni su tali tabelle, usare CTables.
Restrizioni
Quando si esegue una query per ottenere informazioni sullo schema, è possibile usare restrizioni per specificare il tipo di informazioni a cui si è interessati. È possibile immaginare le restrizioni come un filtro o un qualificatore in una query. Ad esempio, nella query:
SELECT * FROM authors WHERE l_name = 'pivo'
l_name
è una restrizione. Questo è un semplice esempio con una sola restrizione; Le classi del set di righe dello schema supportano diverse restrizioni.
Le classi typedef del set di righe dello schema incapsulano tutti i set di righe dello schema OLE DB in modo che sia possibile accedere a un set di righe dello schema esattamente come qualsiasi altro set di righe creando un'istanza e aprendola. Ad esempio, la classe typedef CColumns è definita come:
CRestrictions<CAccessor<CColumnsInfo>
La classe CRestrictions fornisce il supporto per le restrizioni. Dopo aver creato un'istanza del set di righe dello schema, chiamare CRestrictions::Open. Questo metodo restituisce un set di risultati basato sulle restrizioni specificate.
Per specificare le restrizioni, vedere Appendice B: Set di righe dello schema e cercare il set di righe in uso. Ad esempio, CColumns
corrisponde al set di righe COLUMNS. Nell'argomento sono elencate le colonne di restrizione nel set di righe COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME COLUMN_NAME. Nello specificare le restrizioni, è necessario seguire questo ordine.
Ad esempio, se si vuole limitare in base al nome della tabella, TABLE_NAME è la terza colonna di restrizione e quindi chiamare Open
, specificando il nome della tabella desiderato come terzo parametro di restrizione, come illustrato nell'esempio seguente.
Per usare set di righe dello schema
Includere il file
Atldbsch.h
di intestazione (è necessarioAtldbcli.h
anche per il supporto consumer).Creare un'istanza di un oggetto set di righe dello schema nel file di intestazione del consumer o del documento. Se si desiderano informazioni sulla tabella, dichiarare un
CTables
oggetto. Se si desiderano informazioni sulla colonna, dichiarare unCColumns
oggetto . Questo esempio mostra come recuperare le colonne nella tabella degli autori: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(); }
Per recuperare le informazioni, accedere al membro dati appropriato dell'oggetto set di righe dello schema, ad esempio
ColumnSchemaRowset.m_szColumnName
. Questo membro dati corrisponde a COLUMN_NAME. Per visualizzare la colonna OLE DB a cui corrisponde ogni membro dati, vedere CColumns.
Per il riferimento al set di righe dello schema, le classi typedef fornite nei modelli OLE DB (vedere Classi del set di righe dello schema e classi Typedef).
Per altre informazioni sui set di righe dello schema OLE DB, incluse le colonne di restrizione, vedere Appendice B: Set di righe dello schema nella Guida di riferimento per programmatori OLE DB.
Per esempi più complessi di come usare le classi del set di righe dello schema, vedere gli esempi CatDB e DBViewer .
Per informazioni sul supporto del provider per i set di righe dello schema, vedere Supporto dei set di righe dello schema.