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