天天看點

資料庫程式設計之ODBC程式設計

ODBC編寫的應用程式可移植性好,能同時通路不同的資料庫,共享多個資料資源。

一、ODBC概述

ODBC是為了解決連接配接不同關系資料庫管理系統的方法、技術和軟體,使資料庫系統“開放”,能夠實作“資料庫互連”這些問題的接口标準。它是微軟公司開放服務體系(WOSA)中有關資料庫的一個組成部分,它建立了一組規範,并提供一組通路資料庫的應用程式接口(API)。ODBC具有兩重功效或限制力:一方面規範應用開發,另一方面規範資料庫管理系統應用接口。

二、ODBC工作原理概述

ODBC應用系統的體系結構圖示:

資料庫程式設計之ODBC程式設計

有圖可知:ODBC應用系統由使用者應用程式、ODBC驅動程式管理器、資料庫驅動程式、資料源構成。

1. 使用者應用程式

使用者應用程式提供使用者界面、應用邏輯和事務邏輯。使用ODBC開發資料庫應用程式時,應用程式調用的是标準的ODBC函數和SQL語句。應用層使用ODBC API調用接口與資料庫進行互動。使用ODBC來開發應用系統的程式簡稱ODBC應用程式,包括:

1. 請求連接配接資料庫。

2. 向資料源發送SQL語句。

3. 為SQL語句執行結果配置設定存儲空間,定義所讀取的資料格式。

4. 擷取資料庫操作結果或處理錯誤。

5. 進行資料處理并向使用者送出處理結果。

6. 請求事務的送出和復原操作。

7. 斷開與資料源的連接配接。

2. ODBC驅動程式管理器

驅動程式管理器用來管理各種驅動程式。ODBC驅動程式管理器由微軟公司提供,它包含在ODVC32.DLL中,對使用者是透明的,管理應用程式和驅動程式之間的通信。ODBC驅動程式管理器主要功能包含裝載ODBC驅動程式、選擇和連接配接正确的驅動程式、管理資料源、檢查ODBC調用參數的合法性及記錄ODBC函數的調用等,當應用層需要時傳回驅動程式的有關資訊。

ODBC驅動程式管理器可以建立、配置或删除資料源,并檢視系統目前所安裝的資料庫ODBC驅動程式。

3. 資料驅動程式

ODBC通過資料庫驅動程式來提供應用系統與資料庫平台的獨立性。

ODBC應用程式不能直接存儲資料庫,其各種操作請求由驅動程式管理器送出給某個關系資料庫管理系統的ODBC驅動程式,通過調用驅動程式所支援的函數來存取資料庫。資料庫的操作結果也通過驅動程式傳回給應用程式。如果應用程式要操縱不同的資料庫,就要動态地連結到不同的驅動程式上。

ODBC驅動程式

  1. 單束

    資料庫和應用程式在同一台機器上,驅動程式直接完成對資料檔案的I/O操作,這時驅動程式相當于資料管理器。

  2. 多束

    支援客戶機-伺服器、客戶機-應用伺服器/資料庫伺服器等網絡環境下的資料通路,這時由驅動程式完成資料庫通路請求的送出和結果集接收,應用程式使用驅動程式提供的結果集管理接口操縱執行後的結果資料。

4. ODBC資料源管理

資料源是最終使用者要通路的資料,包含了資料庫位置和資料庫類型等資訊,實際上是一種資料連接配接的抽象。

ODBC給每個被通路的資料源指定唯一的資料源名(DSN),并映射到所有必要的、用來存取資料的低層軟體。在連接配接中,用資料源名來代表使用者名、伺服器名、所連接配接d 資料庫名等。最終使用者無須知道資料庫管理系統或其他資料庫管理軟體、網絡以及有關ODBC驅動程式的細節,資料源對最終使用者是透明的。

三、ODBC API基礎

ODBC應用程式程式設計接口(ODBC API)要符合:

1. API一緻性,包括核心級、擴充1級、擴充2級。

2. 文法一緻性,包括最低限度SQL文法級、核心SQL文法級、擴充SQL文法級。

1. 函數概述

ODBC3.0标注提供了76函數接口,大緻分為:

1. 配置設定和釋放環境句柄、連接配接句柄、語句句柄。

2. 連接配接函數。

3. 與資訊相關的函數。

4. 事務處理函數。

5. 執行相關函數。

6. 編目函數。應用程式可以通過編目函數(如SQLTables、SQLColmn)的調用來擷取資料字典的資訊。

2. 句柄機其屬性

句柄是32位整數值,代表一個指針。ODBC3.0中句柄可以分為環境、連接配接、語句和描述符句柄4類,對于每種句柄,不同的驅動程式有不同的資料結構。

應用程式句柄之間的關系圖示:

資料庫程式設計之ODBC程式設計

1. 每個ODBC應用程式需要建立一個ODBC環境,配置設定一個環境句柄,存取資料的全局性背景。

2. 一個環境句柄可以建立多個連接配接句柄,每一個連接配接句柄實作與一個資料源之間的連接配接。

3. 在一個連接配接中可以建立多個語句句柄,它不隻是一個SQL語句,還包括SQL語句産生的結果集以及相關的資訊等。

4. 在ODBC 3.0中又提出了描述句柄的概念,它是描述SQL語句的參數、結果集列的中繼資料集合。

3. 資料類型

ODBC定義了兩套資料類型:SQL資料類型和C資料類型。

SQL資料類型用于資料源,C資料類型用于應用程式的C代碼。SQL資料通過SQLBindcol從結果集列中傳回到應用程式變量;如果SQL語句含參數,應用程式為每個參數調用SQLBindparameter,并把它們綁定至應用程式變量。應用程式可以通過SQLGetTypeInfo來擷取不同的驅動程式對于資料類型的支援情況。

四、ODBC的工作流程

使用ODBC的應用系統大緻的工作流程:

資料庫程式設計之ODBC程式設計
1. 配置資料源
  1. 運作資料管理工具來進行配置
  2. 使用Driver Manager提供的ConfigDsn函數來增删改資料源。這種方法特别适用于在應用程式中建立臨時使用的資料源。
2. 初始化環境

由Driver Manager來進行控制并配置環境屬性,直到應用程式通過調用連接配接函數和某個資料源進行連接配接後,Driver Manager才調用多連的驅動程式中的SQLAllcoHandle來真正配置設定環境句柄的資料結構。

3. 建立連接配接

應用程式用SQLAllocHandle配置設定連接配接句柄,通過SQLConnect、SQLDriverConnect或SQLBroeseConnect與資料源連接配接。其中SQLConnect是最簡單的連接配接函數,輸出參數為配置好的資料源名稱、使用者ID和密碼。

4. 配置設定語句句柄

在處理任何SQL語句之前,應用程式還需要首先配置設定一個語句句柄。語句句柄含有具體的SQL語句以及輸出的結果集等資訊。在後面的執行函數中,語句句柄都是沒有必要的輸入參數。

應用程式還可以通過SQLtStmtAttr來設定語句屬性。

5. 執行SQL語句

應用程式處理SQL語句的方式:預處理或直接執行。如果SQL語句含有參數,應用程式為每個參數調用SQLBindParameter,并把它們綁定至應用程式變量。這樣應用程式可以直接通過改變應用程式緩沖區的内容進而在程式中動态改變SQL語句的具體執行。接下來的操作則會根據語句類型來進行相應處理。

1. 對于有結果集的語句(select或是編目函數),則進行結果集處理。

2. 對于沒有結構集的函數,可以直接利用本語句句柄繼續執行新的語句或是擷取行技術(本次執行所影響的行數)之後繼續執行。

6. 結果集處理

應用程式可以通過SQLNubResultCols來擷取結果集中的列數,通過SQL DescribeCol或是SQLColAttrbute函數來擷取結果集每一列的名稱、資料類型、精度和範圍。

ODBC中使用遊标來處理結果集資料。遊标可分為forward-only遊标和可滾動遊标。Foward-only遊标隻能在結果集中向前滾動,它是ODBC的預設遊标類型。可滾動遊标又可以分為靜态、動态、碼集驅動和混合型驅動4種。

ODBC遊标的打開方式不同于嵌入式SQL,不是顯式聲明而是系統自動産生一個遊标,當結果集剛剛生成時,遊标指向第一行資料之前。應用程式通過SQLBindCol把查詢結果綁定到應用程式緩沖區中,通過SQLFetch或是SQLFetchScroll來移動遊标擷取結果集中的每一行資料。

7. 中止處理

繼續閱讀