一、 VC 提供的數(shù)據(jù)庫訪問技術(shù)
ODBC API 、 MFC ODBC 、 DAO 、 OLE DB 、 ADO
訪問速度:傳統(tǒng)的 ODBC 速度較慢。 OLE DB 和 ADO 都是基于 COM 技術(shù),使用該技術(shù)可以直接訪問數(shù)據(jù)庫的驅(qū)動程序,速度大大提高。
可擴(kuò)展性:通過 OLE DB 和 ActiveX 技術(shù),可以利用 VC 提供的各種組件,控件和第三方提供的組建。從而實現(xiàn)應(yīng)用程序組件化。
訪問不同數(shù)據(jù)源:傳統(tǒng) ODBC 只能訪問關(guān)系數(shù)據(jù)庫。 VC 中提供 OLD DB 技術(shù)可以解決該問題。
二、 幾種技術(shù)概述
1、 ODBC API
提供一個通用接口,為 ORACLE 和 SQLSERVER 都提供了驅(qū)動程序。用戶可以 SQL 語句對數(shù)據(jù)庫進(jìn)行直接的底層功能操作。使用時應(yīng)包含以下頭文件。 ”SQL.H”,”SQLEXT.H”,”SQLTYPES.H”.
使用步驟如下:
第一步:分配 ODBC 環(huán)境,初始化一些內(nèi)部結(jié)構(gòu)。完成該步,需要分配一個 SQLHENV 類型的變量在 ODBC 環(huán)境中做句柄使用。
第二步:為將要使用的每一個數(shù)據(jù)源分配一個連接句柄,有函數(shù) SQLALLocHandle ()完成。
第三步:使用 SQLConnect ()把連接句柄與數(shù)據(jù)庫連接,可以先通過 SQLSetConnectAttr ()設(shè)置連接屬性。
第四步:進(jìn)行 SQL 語句操作。操作完就可以斷開與數(shù)據(jù)庫的連接。
第五步:釋放 ODBC 環(huán)境。
特點:功能強(qiáng)大,提供異步操作,事務(wù)處理等高級功能。目前所有關(guān)系數(shù)據(jù)庫都提供了 ODBC 的驅(qū)動程序,使用很廣泛。
缺點:很難訪問對象數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫。
2、 MFC ODBC 類
為簡化使用 ODBC API , VC 提供了 MFC ODBC 類,封裝了 ODBC API 。
主要 MFC ODBC 類如下:
CDatabase 類:一個 CDatabase 對象表示一個到數(shù)據(jù)源的連接,通過它可以操作數(shù)據(jù)源。一般不需要直接使用 CDatabase 對象,因為 CDecordSet 對象可以實現(xiàn)大多數(shù)功能,但在進(jìn)行事務(wù)處理時, CDatabase 就起到關(guān)鍵作用。
CRecordSet 類:一個 CRecordSet 對象代表一個從數(shù)據(jù)源選擇的一組記錄的集合 ----- 記錄集。記錄集有兩種形式: snapshot 和 dynaset 。前者表示是靜態(tài)視圖。后者表示記錄集與其它用戶對數(shù)據(jù)庫的更新保持同步。
CRecordView 類:是在空間中顯示數(shù)據(jù)庫記錄的視圖。這種視圖是直接連到一個 CRecordSet 對象的格式視圖。他從一個對話框模版資源創(chuàng)建。并將 CRecordSet 對象的字段顯示在對話框模版的控件里。對象利用 DDX 和 RFX 機(jī)制。使格式上的控件和記錄集的字段之間數(shù)據(jù)移動自動化。
CDBException 類:由 Cexception 類派生,以 3 個繼承的變量反映對數(shù)據(jù)庫操作時的異常。
M_nRetCode: ODBC 返回碼。
M_strError: 字符串,描述造成拋出異常的錯誤原因。
M_strStateNativeOrigin: 字符串,描述以 ODBC 錯誤碼表示的異常錯誤。
3、 MFC DAO
MFC DAO 是微軟提供的用于訪問 Microsoft Jet 數(shù)據(jù)庫文件( * 。 Mdb )的工具。當(dāng)只需訪問 Access 數(shù)據(jù)庫時用該技術(shù)很方便。
4、 OLE DB
與 ODBC 技術(shù)類似, OLE DB 屬于數(shù)據(jù)庫訪問技術(shù)中的底層接口。
直接使用 OLEDB 需要大量代碼, VC 中提供了 ATL 模版,
OLEDB 框架定義了應(yīng)用的 3 個基本類。
數(shù)據(jù)提供程序 Data Provider : 擁有自己的數(shù)據(jù)并以表格形式顯示數(shù)據(jù)的應(yīng)用程序。
使用者 Consumers :試用 OLEDB 接口對存儲在數(shù)據(jù)提供程序中對數(shù)據(jù)進(jìn)行控制的應(yīng)用程序。
服務(wù)提供程序 ServiceProvider :是數(shù)據(jù)提供程序和使用者的組合。
使用 OLE DB 編程時,用戶使用組件對象開發(fā)程序,這些組件包括:
枚舉器:用于列出可用的數(shù)據(jù)源;
數(shù)據(jù)源:代表單獨的數(shù)據(jù)和服務(wù)提供程序,用于創(chuàng)建對話;
對話: 用于創(chuàng)建事務(wù)和命令;
事務(wù): 用于將多個操作歸并為單一事務(wù)處理;
命令: 用于向數(shù)據(jù)源發(fā)送文本命令( SQL ),返回行集;
錯誤: 用于獲得錯誤信息。
5、 ADO
ADO 技術(shù)是基于 OLE DB 的訪問接口。繼承了 OLEDB 的優(yōu)點,并對 OLEDB 的接口作了封裝,定義了 ADO 對象,使開發(fā)簡化。 ADO 屬于數(shù)據(jù)庫訪問的高層接口。
ADO 在服務(wù)器應(yīng)用方面非常有效,特別是動態(tài)服務(wù)器頁面( ASP )的支持。
ADO 對象結(jié)構(gòu)類似于 OLEDB ,但并不依靠對象層次。大多數(shù)情況用戶只需創(chuàng)建并使用需要的對象。下面的對象類組成了 ADO 接口。
Connection : 用于表示與數(shù)據(jù)庫的連接,以及處理一些事務(wù)和命令。
Command : 用于處理傳送給數(shù)據(jù)源的命令。
Recordset : 用于處理數(shù)據(jù)的表格集, 包括獲取和修改數(shù)據(jù)。
Field : 用于表示記錄集中的列信息,包括列值和其他信息。
Parameter : 在傳送給數(shù)據(jù)源的命令之間傳遞數(shù)據(jù)。
Property : 用于操作在 ADO 中使用的其它對象的詳細(xì)屬性。
Errro : 用于獲取可能發(fā)生的詳細(xì)錯誤信息