1. 程式人生 > >MFC介面程式設計基礎(22):MFC ODBC連線資料庫

MFC介面程式設計基礎(22):MFC ODBC連線資料庫

上一篇:MFC介面程式設計基礎(21):一個簡單的CArchive類用法的示例(Ex_Archive) 下一篇:MFC介面程式設計基礎(23):建立並註冊資料來源

ODBC是微軟公司支援開放資料庫服務體系的重要組成部分,它定義了一組規範,提供了一組對資料庫訪問的標準API,這些API是建立在標準化版本SQL(Structed Query Language,結構化查詢語言)基礎上的。ODBC位於應用程式和具體的DBMS之間,目的是能夠使應用程式端不依賴於任何DBMS,與不同資料庫的操作由對應的DBMS的ODBC驅動程式完成。

ODBC的構成

ODBC的層次結構圖如下圖所示
在這裡插入圖片描述

  • ODBC管理器
    ODBC管理器的主要任務是管理安裝ODBC驅動程式,管理資料來源。應用程式要訪問資料庫,首先必須在ODBC管理器中建立一個數據源。ODBC管理器根據資料來源提供的資料庫儲存位置,型別及ODBC驅動程式資訊,建立起ODBC與一個特定資料庫之間的聯絡,接下來,程式中只需提供資料來源名,ODBC就能連線相關的資料庫。ODBC管理器位於系統控制元件面板中。
  • 驅動程式管理器
    驅動器管理器位於ODBC32.DLL,是ODBC中最重要的部件,應用程式通過ODBC API執行資料庫操作。其實ODBC API不能直接操作資料庫,需要通過驅動管理器呼叫特定的資料庫的驅動程式,驅動程式在執行完相應操作後,再將結果通過驅動程式管理器返回
    。驅動器管理器支援一個應用程式同時訪問多個DBMS中的資料。
  • ODBC驅動程式
    ODBC驅動程式以DLL檔案形式出現,提供ODBC與資料庫之間的介面。

MFC ODBC類

進行ODBC程式設計,有三個非常重要的元素:環境(Enviroment),連線(Connection)和語句(Statement),它們都是通過控制代碼來訪問的。在MFC的類庫中,CDatabase類封裝了ODBC程式設計的連線控制代碼,CRecordset類封裝了對ODBC程式設計的語句控制代碼,而環境控制代碼被儲存在一個全域性變數中,可以呼叫一個全域性函式AfxGetHENV來獲得當前被MFC使用的環境控制代碼。
此外CRecordView類負責記錄集的使用者介面,CFieldExchange負責CRedordset類與資料來源的資料交換。
使用AppWizard生成應用程式框架過程中,只要選擇了相應的資料庫支援選項,你就能夠很方便地獲得一個數據庫應用程式的框架.

  • CDatabase類
    CDatabase類的主要功能是建立與ODBC資料來源的連線,連線控制代碼放在其資料成員m_hdbc中,並提供一個成員函式GetConnect()用於獲取連線字串。要建立與資料來源的連線,首先建立一個CDatabase物件,再呼叫CDatabase類的Open()函式建立連線。Open()函式的原型定義如下:
	virtul BOOL Open(LPCTSTR lpszDSN,
	BOOL bExclusive=FALSE, 
	BOOL bReadOnly=FALSE,
	LPCTSTR lpszConnect=”ODBC;”,
	BOOL bUseCursorLib=TRUE);

其中:
lpszDSN指定資料來源名,若lpszDSN的值為NULL時,在程式執行時會彈出資料來源對話方塊,供使用者選擇一個數據源。
lpszConnect指定一個連線字串,連線字串中通常包括資料來源名、使用者ID、口令等資訊,與特定的DBMS相關。
例如:

CDatabase db;
db.Open(NULL,FALSE,FALSE,“ODBC;DSN=HotelInfo;UID=SYSTEM;PWD=123456”);

從斷開與一個數據源的連線,可以呼叫CDatabase類的成員函式Close()。

  • CRecordset類
    CRecordset類物件表示從資料來源中抽取出來的一組記錄集。CRecordset類封裝了大量操作資料庫的函式,支援查詢,存取,更新資料庫操作。
    記錄集主要分為兩種型別:

①:快照(Snapshot)記錄集
快照記錄集相當於資料庫的一張靜態檢視,一旦從資料庫抽取出來,當別的使用者更新記錄的操作時不會改變記錄集,只有呼叫Requry()函式重新查詢資料,才能反映資料的變化。自身使用者的新增記錄操作重要呼叫Requry()函式重新查詢資料,但快照集能反應自身使用者的刪除和修改操作。
②:動態(Dynaset)記錄集
動態(Dynaset)記錄集與快照記錄集恰恰相反,是資料庫的動態檢視。當別的使用者更新記錄時,動態記錄集能即時反映所作的修改。在一些實時系統中必須採用動態記錄集,如火車標聯網購票系統。但別的使用者新增記錄,也需要呼叫Requry()函式重新查詢資料後才能反映出來。
CRecordset有六個重要的資料成員如下表所示.。
在這裡插入圖片描述
CRecordset的主要成員函式如下表所示:
在這裡插入圖片描述

  • CRecordView類
    CRecordView類是CFormView的派生類,支援以控制元件檢視來顯示當前記錄,並提供移動記錄的預設選單和工具欄,使用者可以通過記錄檢視方便地瀏覽、修改、刪除和新增記錄。記錄檢視與對話方塊一樣使用DDX資料交換機制在檢視中的控制元件的記錄整合員之間交換資料,只需使用ClassWizard將控制元件與記錄集的欄位資料成員一一繫結。
    CRecordView的主要函式如下表所示:
    在這裡插入圖片描述
  • CFieldExchange類

CFieldExchange類支援記錄欄位資料的自動交換,實現記錄集中欄位資料成員與相應的資料來源中欄位之間的資料交換,類似於對話方塊資料自動交換機制。

上一篇:MFC介面程式設計基礎(21):一個簡單的CArchive類用法的示例(Ex_Archive) 下一篇:MFC介面程式設計基礎(23):建立並註冊資料來源