1.開(kāi)放數據庫連接(ODBC API)
提供了一個(gè)通用的編程接口,允許程序與多種不同的數據庫連接。它為Oracle,SQL Server,MS Excel等都提供了驅動(dòng)程序,使得用戶(hù)可以使用SQL語(yǔ)句對數據庫進(jìn)行直接的底層功能操作。在使用ODBC API時(shí),用戶(hù)須引入的頭文件為"sql.h","sqlext.h","sqltypes.h"。用ODBC API創(chuàng )建數據庫應用程序遵循一定的基本步驟:
第一步是分配ODBC環(huán)境,使一些內部結構初始化。完成這一步,須分配一個(gè)SQLHENV類(lèi)型的變量在ODBC環(huán)境中做句柄使用。
第二步是為將要使用的每一個(gè)數據源分配一個(gè)連接句柄,由函數SQLALLocHandle()完成。
第三步是使用SQLConnect()把連接句柄與數據庫連接,可以先通過(guò)SQLSetConnectAttr()設置連接屬性。
然后就可以進(jìn)行SQL語(yǔ)句的操作,限于篇幅,相關(guān)的函數就不具體介紹了,讀者可以參考相關(guān)書(shū)籍。
操作完成后,用戶(hù)取回相應的結果,就可以取消與數據庫的連接。
最后需要釋放ODBC環(huán)境。
ODBC API的特點(diǎn)是功能強大豐富,提供了異步操作,事務(wù)處理等高級功能,但相應的編程復雜,工作量大。
2.MFC ODBC類(lèi)
MFC1.5后的版本里引入封裝了ODBC功能的類(lèi)。通過(guò)這些類(lèi)提供與ODBC的接口,使得用戶(hù)可以不須處理ODBC API中的繁雜處理就可以進(jìn)行數據庫操作。主要的MFC ODBC類(lèi)如下。
CDatabase類(lèi):一個(gè)CDatabase對象表示一個(gè)到數據源的連接,通過(guò)它可以操作數據源。應用程序可使用多個(gè)CDatabase對象:構造一個(gè)對象并調用OpenEx()成員函數打開(kāi)一個(gè)連接。接著(zhù)構造CRecordSet對象以操作連接的數據源,并向CDatabase對象傳遞記錄集構造程序指針。完成使用后用Close()成員函數銷(xiāo)毀CDatabase對象。一般情況下并不需要直接使用CDatabase對象,因為CRecordSet對象可以實(shí)現大多數的功能。但是在進(jìn)行事務(wù)處理時(shí),CDatabase就起到關(guān)鍵作用。事務(wù)(Transaction)指的是將一系列對數據源的更新放在一起,同時(shí)提交或一個(gè)也不提交,為的是確保多用戶(hù)對數據源同時(shí)操作時(shí)的數據正確性。
CRecordSet類(lèi):一個(gè)CRecordSet對象代表一個(gè)從數據源選擇的一組記錄的集合-記錄集。記錄集有兩種形式:snapshot和dynaset。前者表示數據的靜態(tài)視圖,后者表示記錄集與其他用戶(hù)對數據庫的更新保持同步。通過(guò)CRecordSet對象,用戶(hù)可以對數據庫中的記錄進(jìn)行各種操作。
CRecordView類(lèi):CRecordView對象是在空間中顯示數據庫記錄的視圖。這種視圖是一種直接連到一個(gè)CRecordSet對象的格式視圖,它從一個(gè)對話(huà)框模板資源創(chuàng )建,并將CRecordSet對象的字段顯示在對話(huà)框模板的控件里。對象利用DDX和RFX機制,使格式上的控件和記錄集的字段之間數據移動(dòng)自動(dòng)化,也就是說(shuō),用戶(hù)甚至不要編寫(xiě)一行代碼就可以實(shí)現簡(jiǎn)單的數據庫記錄查看程序。
CDBException類(lèi):由Cexception類(lèi)派生,以三個(gè)繼承的成員變量反映對數據庫操作時(shí)的異常:
m_nRetCode:以ODBC返回代碼(SQL_RETURN)的形式表明造成異常的原因。
m_strError:字符串,描述造成拋出異常的錯誤原因。
m_strStateNativeOrigin:字符串,用以描述以ODBC錯誤代碼表示的異常錯誤。
MFC數據庫類(lèi)成員函數都能拋出CDBException類(lèi)型的異常,所以在代碼對數據庫進(jìn)行操作后監測異常是正確做法。
MFC ODBC類(lèi)在實(shí)際開(kāi)發(fā)中應用最廣,因為它功能豐富,操作相對簡(jiǎn)便。
3.MFC DAO(數據訪(fǎng)問(wèn)對象)編程
DAO用于和微軟的Access數據庫接口。在數據庫應用程序如果只需與Access數據庫接口時(shí),使用DAO編程較方便。其主要類(lèi)如下。
CDaoWorkspace:CDaoWorkspace對象可以讓一個(gè)用戶(hù)管理從登陸到離開(kāi)期間,指定的密碼保護的數據庫會(huì )話(huà)全過(guò)程。大多數情況下不要多個(gè)工作區也不要創(chuàng )建明確的工作區對象。因為在打開(kāi)數據庫和記錄集對象時(shí),它們可以使用DAO缺省工作區。
CDaoDatabase:代表一個(gè)連接,類(lèi)似上述CDatabase類(lèi)。
CDaoRecordSet:用來(lái)選擇記錄集并操作,類(lèi)似上述CRecordSet類(lèi)。
CDaoRecordView:類(lèi)似上述CRecordView類(lèi)。
CDaoException:類(lèi)似上述CDBException類(lèi)。
CDaoTableDef:表示基本表或附加表的定義。每個(gè)DAO數據庫對象包括一個(gè)稱(chēng)為T(mén)ableDef的收集,包含所有存儲的DAO表定義對象。CDaoTableDef對象可以用來(lái)控制表定義。
CDaoQueryDef:CDaoQueryDef對象表示了一個(gè)查詢(xún)定義(querydef)。
CDaoFieldExchange:支持數據庫類(lèi)使用的DAO字段交換(DFX)例程。也可處理事務(wù),類(lèi)似MFC ODBC類(lèi)。
MFC DAO僅用來(lái)支持Access數據庫,應用范圍相對固定。
4.OLE DB
OLE DB在數據提供程序和用戶(hù)之間提供了靈活的組件對象模型(COM)接口,這種靈活性有時(shí)會(huì )使得操作復雜化。OLE DB框架定義了應用的三個(gè)基本類(lèi)。
數據提供程序Data Provider:擁有自己的數據并以表格形式顯示數據的應用程序。提供OLE DB的行集COM接口,期顯示范圍可以從單一數據表格的簡(jiǎn)單提供者知道更復雜的分布式數據庫系統。
使用者Consumers:使用OLE DB接口對存儲在數據提供程序中的數據進(jìn)行控制的應用程序。用戶(hù)應用程序歸為使用類(lèi)。
服務(wù)提供程序Service Provider:是數據提供程序和使用者的組合。服務(wù)提供程序沒(méi)有自己的數據,但使用
OLE DB使用者接口來(lái)訪(fǎng)問(wèn)存儲在數據提供程序中的數據。然后,服務(wù)提供程序通過(guò)打開(kāi)數據提供程序接口使得數據對使用者有效。服務(wù)提供程序常用于向應用程序提供高層次服務(wù),比如高級分布式查詢(xún)。
OLE DB編程時(shí),用戶(hù)使用組件對象開(kāi)發(fā)應用程序。這些組件有:
枚舉器:用于列出可用的數據源;
數據源:代表單獨的數據和服務(wù)提供程序,用于創(chuàng )建對話(huà);
對話(huà):用于創(chuàng )建事務(wù)和命令;
事務(wù):用于將多個(gè)操作歸并為單一事務(wù)處理;
命令:用于向數據源發(fā)送文本命令(SQL),返回行集;
錯誤:用于獲得錯誤信息。
5.ActiveX數據對象(ADO)
是微軟提供的面向對象的接口,與OLE DB類(lèi)似,但接口更簡(jiǎn)單,具有更廣泛的特征數組和更高程度的靈活性。ADO基于COM,提供編程語(yǔ)言可利用的對象,除了面向VC++,還提供面向其他各種開(kāi)發(fā)工具的應用,如VB,VJ等。ADO在服務(wù)器應用方面非常有用,特別是對于動(dòng)態(tài)服務(wù)器頁(yè)面ASP(Active Server Page)。
ADO對象結構類(lèi)似于OLE DB,但并不依靠對象層次。大多數情況下,用戶(hù)只需要創(chuàng )建并只使用需要處理的對象。下面的對象類(lèi)組成了ADO接口。
Connection:用于表示與數據庫的連接,以及處理一些命令和事務(wù)。
Command:用于處理傳送給數據源的命令。
Recordset:用于處理數據的表格集,包括獲取和修改數據。
Field:用于表示記錄集中的列信息,包括列值和其他信息。
Parameter:用于對傳送給數據源的命令之間來(lái)回傳送數據。
Property:用與操作在A(yíng)DO中使用的其他對象的詳細屬性。
Error:用于獲得可能發(fā)生的錯誤的詳細信息。
在VC++使用ADO需要進(jìn)行COM操作,詳細方法在此就不贅述了。