Architettura dei modelli di provider OLE DB
Origini dati e sessioni
L'architettura dei provider OLE DB include un oggetto DataSource (origine dati) e uno o più oggetti Session per le sessioni. L'oggetto DataSource è l'oggetto iniziale di cui ciascun provider deve creare un'istanza. Quando un'applicazione consumer necessita di dati, viene creato l'oggetto DataSource per avviare il provider. L'oggetto DataSource a sua volta crea un oggetto Session mediante l'interfaccia IDBCreateSession affinché il consumer possa eseguire la connessione all'oggetto DataSource. Per i programmatori ODBC l'oggetto DataSource può essere considerato come l'equivalente di HENV, mentre l'oggetto Session corrisponde a HDBC.
Con i file di origine generati dalla Creazione guidata provider OLE DB ATL i modelli OLE DB implementano un oggetto DataSource. Una sessione è un oggetto che corrisponde a TSession OLE DB.
Interfacce facoltative e obbligatorie
I modelli provider OLE DB offrono implementazioni precostituite di tutte le interfacce obbligatorie. Le interfacce facoltative e obbligatorie vengono definite da OLE DB per diversi tipi di oggetti:
Come si può notare, i modelli provider OLE DB non implementano gli oggetti Row e Storage.
Nella tabella riportata di seguito sono elencate le interfacce facoltative e obbligatorie per gli oggetti sopra indicati, in base alla documentazione SDK su OLE DB 2.6:
Componente |
Interfaccia |
Commento |
---|---|---|
[obbligatoria] IDBCreateSession [obbligatoria] IDBInitialize [obbligatoria] IDBProperties [obbligatoria] IPersist [facoltativa] IConnectionPointContainer [facoltativa] IDBAsynchStatus [facoltativa] IDBDataSourceAdmin [facoltativa] IDBInfo [facoltativa] IPersistFile [facoltativa] ISupportErrorInfo |
Connessione dal consumer al provider. L'oggetto viene utilizzato per specificare le proprietà relative alla connessione, quali ID utente, password e DSN. È inoltre possibile utilizzare l'oggetto per amministrare un'origine dati (creazione, aggiornamento, eliminazione, tabelle e così via). |
|
[obbligatoria] IGetDataSource [obbligatoria] IOpenRowset [obbligatoria] ISessionProperties [facoltativa] IAlterIndex [facoltativa] IAlterTable [facoltativa] IBindResource [facoltativa] ICreateRow [facoltativa] IDBCreateCommand [facoltativa] IDBSchemaRowset [facoltativa] IIndexDefinition [facoltativa] ISupportErrorInfo [facoltativa] ITableCreation [facoltativa] ITableDefinition [facoltativa] ITableDefinitionWithConstraints [facoltativa] ITransaction [facoltativa] ITransactionJoin [facoltativa] ITransactionLocal [facoltativa] ITransactionObject |
L'oggetto Session rappresenta una singola conversazione tra un consumer e un provider. Per vari aspetti è simile a HSTMT ODBC, in quanto possono essere presenti più sessioni contemporaneamente. L'oggetto Session è il principale collegamento per la funzionalità OLE DB. Per accedere a un oggetto Command, Transaction o Rowset, è necessario passare dall'oggetto Session. |
|
[obbligatoria] IAccessor [obbligatoria] IColumnsInfo [obbligatoria] IConvertType [obbligatoria] IRowset [obbligatoria] IRowsetInfo [facoltativa] IChapteredRowset [facoltativa] IColumnsInfo2 [facoltativa] IColumnsRowset [facoltativa] IConnectionPointContainer [facoltativa] IDBAsynchStatus [facoltativa] IGetRow [facoltativa] IRowsetChange [facoltativa] IRowsetChapterMember [facoltativa] IRowsetCurrentIndex [facoltativa] IRowsetFind [facoltativa] IRowsetIdentity [facoltativa] IRowsetIndex [facoltativa] IRowsetLocate [facoltativa] IRowsetRefresh [facoltativa] IRowsetScroll [facoltativa] IRowsetUpdate [facoltativa] IRowsetView [facoltativa] ISupportErrorInfo [facoltativa] IRowsetBookmark |
L'oggetto Rowset rappresenta i dati provenienti dall'origine dati. L'oggetto effettua le associazioni di tali dati, nonché di qualsiasi operazione base (aggiornamento, recupero, spostamento e altre) eseguita sui dati. È sempre necessario disporre di un oggetto Rowset per contenere e modificare i dati. |
|
[obbligatoria] IAccessor [obbligatoria] IColumnsInfo [obbligatoria] ICommand [obbligatoria] ICommandProperties [obbligatoria] ICommandText [obbligatoria] IConvertType [facoltativa] IColumnsRowset [facoltativa] ICommandPersist [facoltativa] ICommandPrepare [facoltativa] ICommandWithParameters [facoltativa] ISupportErrorInfo [facoltativa] ICommandStream |
L'oggetto Command gestisce le operazioni sui dati, quali ad esempio le query. È in grado di gestire istruzioni con o senza parametri. È inoltre utilizzato per la gestione delle associazioni per parametri e colonne di output. Un'associazione è una struttura che contiene informazioni sulle modalità di recupero di una colonna in un rowset, quali la posizione ordinale, il tipo di dati, la lunghezza e lo stato. |
|
Transaction (facoltativo) |
[obbligatoria] IConnectionPointContainer [obbligatoria] ITransaction [facoltativa] ISupportErrorInfo |
L'oggetto Transaction definisce un'unità atomica di lavoro su un'origine dati e determina le relazioni tra le unità di lavoro. Questo oggetto non è supportato direttamente dai modelli provider OLE DB, ma deve essere creato manualmente. |
Per ulteriori informazioni, vedere i seguenti argomenti: