Condividi tramite


Gestione driver

Gestione driver è una libreria che gestisce la comunicazione tra le applicazioni e i driver. Ad esempio, sulle piattaforme Microsoft Windows, Gestione Manager è una libreria di collegamento dinamico (DLL) scritta da Microsoft e può essere ridistribuita dagli utenti dell'SDK MDAC 2.8 SP1 ridistribuibile.

Gestione driver esiste principalmente come comodità per chi scrive applicazioni e risolve una serie di problemi comuni a tutte le applicazioni. Tra questi, la determinazione del driver da caricare in base al nome dell’origine dati, il caricamento e lo scaricamento dei driver e la chiamata di funzioni nei driver.

Per capire perché quest'ultimo è un problema, consideriamo cosa succederebbe se l'applicazione chiamasse direttamente le funzioni del driver. A meno che l'applicazione non sia collegata direttamente a un particolare driver, dovrebbe costruire una tabella di puntatori alle funzioni di quel driver e chiamare tali funzioni tramite puntatore. L'uso dello stesso codice per più driver alla volta aggiunge un altro livello di complessità. L'applicazione deve innanzitutto impostare un puntatore a funzione in modo che punti alla funzione corretta nel driver corretto, per poi chiamare la funzione tramite tale puntatore.

Gestione driver risolve questo problema fornendo un'unica posizione per chiamare ogni funzione. L'applicazione è collegata a Gestione driver e chiama le funzioni ODBC in Gestione driver, non il driver. L'applicazione identifica il driver di destinazione e l'origine dati con un handle di connessione. Quando carica un driver, Gestione driver crea una tabella di puntatori alle funzioni di quel driver. Usa l'handle di connessione passato dall'applicazione per trovare l'indirizzo della funzione nel driver di destinazione e chiama tale funzione in base all'indirizzo.

Nella maggior parte dei casi, Gestione driver si limita a passare le chiamate di funzione dall'applicazione al driver corretto. Tuttavia, implementa anche alcune funzioni (SQLDataSources, SQLDrivers e SQLGetFunctions) ed esegue un controllo degli errori di base. Ad esempio, Gestione driver controlla che gli handle non siano puntatori nulli, che le funzioni siano chiamate nell'ordine corretto e che alcuni argomenti delle funzioni siano validi. Per una descrizione completa degli errori controllati dal Driver Manager, consulta la sezione di riferimento per ogni funzione e Appendice B: Tabelle di transizione di stato ODBC.

L'ultimo ruolo importante di Gestione driver è quello di caricare e scaricare i driver. L'applicazione carica e scarica solo Gestione driver. Quando vuole utilizzare un particolare driver, chiama una funzione di connessione (SQLConnect, SQLDriverConnect o SQLBrowseConnect) in Gestione driver e specifica il nome di una particolare origine dati o di un driver, come "Accounting" o "SQL Server". Utilizzando questo nome, Gestione driver cerca nelle informazioni sull'origine dati il nome file del driver, ad esempio Sqlsrvr.dll. Quindi carica il driver (se non è già stato caricato), memorizza l'indirizzo di ogni funzione del driver e chiama la funzione di connessione del driver, che si inizializza e si connette all'origine dati.

Quando l'applicazione viene eseguita usando il driver, chiama SQLDisconnect in Gestione driver. Gestione driver chiama questa funzione nel driver, che si disconnette dall'origine dati. Tuttavia, Gestione driver mantiene il driver in memoria nel caso in cui l'applicazione si riconnetta ad esso. Scarica il driver solo quando l'applicazione libera la connessione utilizzata dal driver o utilizza la connessione per un altro driver e nessun'altra connessione utilizza il driver. Per una descrizione completa del ruolo di Gestione driver nel caricamento e scaricamento dei driver, vedere Ruolo di Gestione driver nel processo di Connessione.