如果應用程序調用一個ODBC API函數,ODBC Administrator或Driver Manager會把命令傳遞給適當的驅動程序。經過翻譯之後,驅動程序會將命令傳遞給特定的後端數據庫服務器,采用它能理解的語言或代碼。而通過ODBC返回的任何結果或結果集都將會沿著相反的方向傳遞。ODBC的結構如圖所示:
圖:ODBC的結構
對Visual Basic應用程序來說,在處理函數調用時,驅動程序和驅動程序管理器(Driver Manage)是一個整體。應用程序用ODBC API來完成以下任務:
(1)請求與數據源建立連接,創建一次會話;
(2)向數據源發出SQL請求;
(3)定義一個緩沖區和數據格式,用來存儲SQL請求結果;
(4)提取SQL請求的結果;
(5)處理各種錯誤;
(6)給用戶報告結果;
(7)事務提交或事務撤銷;
(8)中斷與數據源的連接。
上述結構中,驅動程序管理器(Driver Manager)是一個DLL,它由Microsoft提供,是一個帶有入口函數庫的動態連接,驅動程序管理器的基本任務是加載驅動程序。此外,還具有以下功能:
(1)根據ODBC.INI文件,把數據源名映射到相應的驅動程序;
(2)處理幾個ODBC初始化函數;
(3)進行參數合法化檢驗。
結構圖中SQL Server ODBC驅動程序是一個DLL,用來完成ODBC函數調用並與數據源進行對話。當應用程序調用SQLDriverConnection時,驅動程序管理器加載驅動程序。根據相應程序的要求,驅動程序可以完成以下任務:
(1)建立與數據源的連接;
(2)向數據源提交請求;
(3)根據應用程序的需要,完成數據格式的轉換;
(4)把結果返回給應用程序;
(5)申請並控制游標(Cursor);
(6)根據數據源的需要,完成事務初始化。
上述這些功能對應用程序來說都是透明的。
結構圖中的物理數據源是DBMS、操作系統和網絡平台的一個綜合體。
和Windows其他地方一樣,為了處理對象,ODBC需使用相應的句柄。在能真正做些什麼事情以前,必須先從ODBC或Windows獲得這種句柄。ODBC提供了四個句柄:環境、連接、語句和描述符句柄,並且必須在連接數據源之前申請環境句柄。連接句柄的作用是將資源分配給實際的數據源連接。應用程序在與數據源連接以前必須先申請連接句柄,每個連接句柄只與一個環境句柄相連,一個環境句柄可與多個連接句柄相連;語句句柄用於管理對系統發出的實際請求,它必須與一個連接關聯在一起,而這個連接也必須與環境關聯到一起,應用程序在提交SQL請求以前必須先請求一個語句句柄,每一個語句句柄只與一個連接句柄相連,一個連接句柄可與多個語句句柄相連;描述符句柄則提供一些特殊的描述信息,例如結果集的數據列信息,或SQL語句的動態參數等等。下圖顯示了環境句柄、連接句柄和語句句柄之間的關系。
每一種SQL數據類型對應一種Visual Basic數據類型。在默認的情況下,驅動程序假設SQL語句中的列或參數的數據類型與連接在其上的Visual Basic數據類型是相對應的。如果Visual Basic數據類型不使用默認的數據類型,應用程序可以用函數SQLBindCol、SQLGetData、SQLBindParameter中的參數fcType來指定另外一個數據類型。在從數據源返回數據之前,驅動程序將數據轉換為指定的數據類型。同樣,在把數據傳給數據源之前,驅動程序將指定的Visual Basic數據類型轉換成SQL數據類型。