Condividi tramite


Il gestore dei driver

Gestore dei driver è una libreria che gestisce la comunicazione tra applicazioni e driver. Ad esempio, sulle piattaforme Microsoft Windows, la Gestione driver è una libreria a collegamento dinamico (DLL) scritta da Microsoft e può essere ridistribuita dagli utenti del SDK ridistribuibile MDAC 2.8 SP1.

Gestione driver esiste principalmente come comodità per gli autori di applicazioni e risolve una serie di problemi comuni a tutte le applicazioni. Questi includono la determinazione del driver da caricare in base al nome di un'origine dati, al caricamento e allo scaricamento dei driver e alla chiamata di funzioni nei driver.

Per vedere perché quest'ultimo è un problema, considerare cosa accadrebbe se l'applicazione chiamasse direttamente le funzioni nel driver. A meno che l'applicazione non fosse collegata direttamente a un determinato driver, sarebbe necessario creare una tabella di puntatori alle funzioni in tale driver e chiamare tali funzioni in base al 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 e quindi chiamare la funzione tramite tale puntatore.

Il Gestore dei Driver risolve questo problema fornendo un unico punto per chiamare ogni funzione. L'applicazione è collegata al Gestore del driver e chiama le funzioni ODBC nel Gestore del driver, non il driver. L'applicazione identifica il driver di destinazione e l'origine dati con un handle di connessione. Quando carica un driver, il Gestore dei driver compila una tabella di puntatori alle funzioni di tale 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.

Per lo più, il gestore dei driver passa solo le chiamate di funzione dall'applicazione al driver corretto. Implementa tuttavia anche alcune funzioni (SQLDataSources, SQLDrivers e SQLGetFunctions) ed esegue il controllo degli errori di base. Ad esempio, il Gestore Driver controlla che gli handle non siano puntatori null, che le funzioni siano chiamate nell'ordine corretto e che determinati argomenti di funzione siano validi. Per una descrizione completa degli errori controllati dal Gestore del driver, vedere la sezione di riferimento per ogni funzione e Appendice B: Tabelle di transizione degli stati ODBC.

Il ruolo principale finale di Gestione driver è il caricamento e lo scaricamento dei driver. L'applicazione carica e scarica solo il Gestore dei driver. Quando vuole usare un driver specifico, chiama una funzione di connessione (SQLConnect, SQLDriverConnect o SQLBrowseConnect) in Gestione driver e specifica il nome di un'origine dati o di un driver specifico, ad esempio "Accounting" o "SQL Server". Usando questo nome, Gestione driver cerca nelle informazioni sull'origine dati il nome del file del driver, ad esempio Sqlsrvr.dll. Carica quindi il driver (presupponendo che non sia già caricato), archivia l'indirizzo di ogni funzione nel driver e chiama la funzione di connessione nel driver, che quindi inizializza se stessa e si connette all'origine dati.

Quando l'applicazione ha finito di utilizzare il driver, chiama SQLDisconnect nel Gestione driver. Il gestore driver chiama la funzione nel driver, che si disconnette dall'origine dati. Tuttavia, il Gestore dei driver mantiene il driver in memoria nel caso in cui l'applicazione si ricollega. Scarica il driver solo quando l'applicazione libera la connessione usata dal driver o usa la connessione per un driver diverso e nessun'altra connessione usa il driver. Per una descrizione completa del ruolo del Gestore Driver nel caricamento e scaricamento dei driver, vedere Ruolo del Gestore Driver nel processo di connessione.