驅動程式管理員

驅動程式管理員是一個程式庫,可管理應用程式和驅動程式之間的通訊。 例如,在 Microsoft Windows 平台上,驅動程式管理員是由 Microsoft 撰寫的動態連結程式庫 (DLL),可由可轉散發 MDAC 2.8 SP1 SDK 的使用者轉散發。

驅動程式管理員主要是為了方便應用程式寫入器使用而存在,且能針對所有應用程式解決許多常見問題。 其中包括根據資料來源名稱決定要載入的驅動程式、載入和卸載驅動程式,以及呼叫驅動程式中的函式。

若要了解後者會發生問題的原因,請考慮應用程式直接呼叫驅動程式中的函式時會發生什麼情況。 除非應用程式直接連結至特定驅動程式,否則必須建置該驅動程式中函式的指標資料表,並以指標呼叫這些函式。 一次針對多個驅動程式使用相同程式碼,會導致複雜度提升至另一個層級。 應用程式必須先設定函式指標,以指向正確驅動程式中的正確函式,然後再透過該指標呼叫函式。

驅動程式管理員會提供單一位置來呼叫每個函式,從而解決此問題。 應用程式會連結至驅動程式管理員,並在驅動程式管理員 (而非驅動程式) 中呼叫 ODBC 函式。 應用程式會使用連線控制代碼,識別目標驅動程式和資料來源。 在載入驅動程式時,驅動程式管理員會建置該驅動程式中函式的指標資料表。 其會使用應用程式所傳遞的連線控制代碼,在目標驅動程式中尋找函式的位址,並依位址呼叫該函式。

在大部分情況下,驅動程式管理員只是將函式呼叫從應用程式傳遞至正確的驅動程式。 不過,驅動程式管理員也會實作某些函式 (SQLDataSourcesSQLDriversSQLGetFunctions),並執行基本錯誤檢查。 例如,驅動程式管理員會檢查控制代碼是否為 null 指標、函式呼叫順序是否正確,以及特定函式引數是否有效。 如需驅動程式管理員所檢查的錯誤相關完整描述,請參閱每個函式的參考區段和附錄 B:ODBC 狀態轉換資料表

最後,驅動程式管理員還扮演了一個重大角色,便是載入和卸載驅動程式。 應用程式只會載入和卸載驅動程式管理員。 若想使用特定驅動程式,應用程式會在驅動程式管理員中呼叫連線函式 (SQLConnectSQLDriverConnectSQLBrowseConnect),並指定特定資料來源或驅動程式的名稱,例如「Accounting」或「SQL Server」。驅動程式管理員會使用該名稱,在資料來源資訊中搜尋驅動程式檔案名稱,例如 Sqlsrvr.dll。 接著,其會載入驅動程式 (假設尚未載入),將每個函式的位址儲存在驅動程式中,並在驅動程式中呼叫連線函式,然後將本身初始化並連線至資料來源。

當應用程式使用完驅動程式後,就會在驅動程式管理員中呼叫 SQLDisconnect。 驅動程式管理員會在驅動程式中呼叫此函式,從而導致與資料來源的連線中斷。 不過,驅動程式管理員會將驅動程式保留在記憶體中,以防應用程式重新連線。 只有在應用程式釋放驅動程式所使用的連線,或使用不同驅動程式的連線,且沒有其他連線使用該驅動程式時,才會卸載驅動程式。 如需在載入和卸載驅動程式過程中,驅動程式管理員所扮演角色的完整描述,請參閱驅動程式管理員在連線程序中的角色