五種VC++資料庫開發技術的比較

manfenqiyewang發表於2014-12-01

從功能簡單的資料庫(如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操作,具體方法在此就不贅述了。

原文章釋出網址內貿網:http://

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29874002/viewspace-1352832/,如需轉載,請註明出處,否則將追究法律責任。

相關文章