幾種數據庫編程接口

 從功能簡單的數據庫(如Jet   Engine)到複雜的大型數據庫系統(如oracle),VC++6.0都提供了一些編程接口。本文主要介紹以下五種:

  1.ODBC   API;

  2.MFC   ODBC類;

  3.MFC   DAO類;(數據訪問對象)

  4.MFC的OLE/DB;

  5.ActiveX數據對象(ADO)。

  1.開放數據庫連接(ODBC   API):提供了一個通用的編程接口,允許程序與多種不同的數據庫連接。它爲Oracle,SQL   Server,MS   Excel等都提供了驅動程序,使得用戶可以使用SQL語句對數據庫進行直接的底層功能操作。在使用ODBC   API時,用戶須引入的頭文件爲 "sql.h ", "sqlext.h ", "sqltypes.h "。用ODBC   API創建數據庫應用程序遵循一定的基本步驟:

  第一步是分配ODBC環境,使一些內部結構初始化。完成這一步,須分配一個SQLHENV類型的變量在ODBC環境中做句柄使用。

  第二步是爲將要使用的每一個數據源分配一個連接句柄,由函數SQLALLocHandle()完成。

  第三步是使用SQLConnect()把連接句柄與數據庫連接,可以先通過SQLSetConnectAttr()設置連接屬性。

  然後就可以進行SQL語句的操作,限於篇幅,相關的函數就不具體介紹了,讀者可以參考相關書籍。

  操作完成後,用戶取回相應的結果,就可以取消與數據庫的連接。

  最後需要釋放ODBC環境。

  ODBC   API的特點是功能強大豐富,提供了異步操作,事務處理等高級功能,但相應的編程複雜,工作量大。

  2.MFC   ODBC類:MFC1.5後的版本里引入封裝了ODBC功能的類。通過這些類提供與ODBC的接口,使得用戶可以不須處理ODBC   API中的繁雜處理就可以進行數據庫操作。主要的MFC   ODBC類如下。

  CDatabase類:一個CDatabase對象表示一個到數據源的連接,通過它可以操作數據源。應用程序可使用多個CDatabase對象:構造一個對象並調用OpenEx()成員函數打開一個連接。接着構造CRecordSet對象以操作連接的數據源,並向CDatabase對象傳遞記錄集構造程序指針。完成使用後用Close()成員函數銷燬CDatabase對象。一般情況下並不需要直接使用CDatabase對象,因爲CRecordSet對象可以實現大多數的功能。但是在進行事務處理時,CDatabase就起到關鍵作用。事務(Transaction)指的是將一系列對數據源的更新放在一起,同時提交或一個也不提交,爲的是確保多用戶對數據源同時操作時的數據正確性。

  CRecordSet類:一個CRecordSet對象代表一個從數據源選擇的一組記錄的集合-記錄集。記錄集有兩種形式:snapshot和dynaset。前者表示數據的靜態視圖,後者表示記錄集與其他用戶對數據庫的更新保持同步。通過CRecordSet對象,用戶可以對數據庫中的記錄進行各種操作。

  CRecordView類:CRecordView對象是在空間中顯示數據庫記錄的視圖。這種視圖是一種直接連到一個CRecordSet對象的格式視圖,它從一個對話框模板資源創建,並將CRecordSet對象的字段顯示在對話框模板的控件裏。對象利用DDX和RFX機制,使格式上的控件和記錄集的字段之間數據移動自動化,也就是說,用戶甚至不要編寫一行代碼就可以實現簡單的數據庫記錄查看程序。

  CDBException類:由Cexception類派生,以三個繼承的成員變量反映對數據庫操作時的異常:

   m_nRetCode:以ODBC返回代碼(SQL_RETURN)的形式表明造成異常的原因。

   m_strError:字符串,描述造成拋出異常的錯誤原因。

   m_strStateNativeOrigin:字符串,用以描述以ODBC錯誤代碼表示的異常錯誤。

  MFC數據庫類成員函數都能拋出CDBException類型的異常,所以在代碼對數據庫進行操作後監測異常是正確做法。

  MFC   ODBC類在實際開發中應用最廣,因爲它功能豐富,操作相對簡便。

3.MFC   DAO(數據訪問對象)編程:DAO用於和微軟的Access數據庫接口。在數據庫應用程序如果只需與Access數據庫接口時,使用DAO編程較方便。其主要類如下。

  CDaoWorkspace:CDaoWorkspace對象可以讓一個用戶管理從登陸到離開期間,指定的密碼保護的數據庫會話全過程。大多數情況下不要多個工作區也不要創建明確的工作區對象。因爲在打開數據庫和記錄集對象時,它們可以使用DAO缺省工作區。

  CDaoDatabase:代表一個連接,類似上述CDatabase類。

   CDaoRecordSet:用來選擇記錄集並操作,類似上述CRecordSet類。

   CDaoRecordView:類似上述CRecordView類。

   CDaoException:類似上述CDBException類。

   CDaoTableDef:表示基本表或附加表的定義。每個DAO數據庫對象包括一個稱爲TableDef的收集,包含所有存儲的DAO表定義對象。CDaoTableDef對象可以用來控制表定義。

   CDaoQueryDef:CDaoQueryDef對象表示了一個查詢定義(querydef)。

   CDaoFieldExchange:支持數據庫類使用的DAO字段交換(DFX)例程。也可處理事務,類似MFC   ODBC類。

  MFC   DAO僅用來支持Access數據庫,應用範圍相對固定。

  4.OLE   DB:OLE   DB在數據提供程序和用戶之間提供了靈活的組件對象模型(COM)接口,這種靈活性有時會使得操作複雜化。OLE   DB框架定義了應用的三個基本類。

  數據提供程序Data   Provider:擁有自己的數據並以表格形式顯示數據的應用程序。提供OLE   DB的行集COM接口,期顯示範圍可以從單一數據表格的簡單提供者知道更復雜的分佈式數據庫系統。

  使用者Consumers:使用OLE   DB接口對存儲在數據提供程序中的數據進行控制的應用程序。用戶應用程序歸爲使用類。

  服務提供程序Service   Provider:是數據提供程序和使用者的組合。服務提供程序沒有自己的數據,但使用

  OLE   DB使用者接口來訪問存儲在數據提供程序中的數據。然後,服務提供程序通過打開數據提供程序接口使得數據對使用者有效。服務提供程序常用於嚮應用程序提供高層次服務,比如高級分佈式查詢。

  OLE   DB編程時,用戶使用組件對象開發應用程序。這些組件有:

   枚舉器:用於列出可用的數據源;

   數據源:代表單獨的數據和服務提供程序,用於創建對話;

   對話:用於創建事務和命令;

   事務:用於將多個操作歸併爲單一事務處理;

   命令:用於向數據源發送文本命令(SQL),返回行集;

   錯誤:用於獲得錯誤信息。

  5.ActiveX數據對象(ADO):是微軟提供的面向對象的接口,與OLE   DB類似,但接口更簡單,具有更廣泛的特徵數組和更高程度的靈活性。ADO基於COM,提供編程語言可利用的對象,除了面向VC++,還提供面向其他各種開發工具的應用,如VB,VJ等。ADO在服務器應用方面非常有用,特別是對於動態服務器頁面ASP(Active   Server   Page)。

  ADO對象結構類似於OLE   DB,但並不依靠對象層次。大多數情況下,用戶只需要創建並只使用需要處理的對象。下面的對象類組成了ADO接口。

   Connection:用於表示與數據庫的連接,以及處理一些命令和事務。

   Command:用於處理傳送給數據源的命令。

   Recordset:用於處理數據的表格集,包括獲取和修改數據。

   Field:用於表示記錄集中的列信息,包括列值和其他信息。

   Parameter:用於對傳送給數據源的命令之間來回傳送數據。

   Property:用與操作在ADO中使用的其他對象的詳細屬性。

   Error:用於獲得可能發生的錯誤的詳細信息。

  在VC++使用ADO需要進行COM操作,詳細方法在此就不贅述了。

  在當今流行的分佈式開發環境下,VC++6.0在數據庫開發方面有較強的優勢,學會

  在不同的場合選用不同的技術,對開發人員來說是必要的技術。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章