ODBC / OLEDB___DAO / RDO / ADO
ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標準API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。---出現(xiàn)的最早,但不總是萬能。是Microsoft引進的一種早期數(shù)據(jù)庫接口技術(shù)。它實際上是ADO的前身。
OLE DB 是 Microsoft 的一個戰(zhàn)略性系統(tǒng)級編程接口,用于管理整個組織內(nèi)的數(shù)據(jù)。OLE DB 是建立在 ODBC 功能之上的一個開放規(guī)范。ODBC 是為訪問關(guān)系型數(shù)據(jù)庫而專門開發(fā)的,OLE DB 則用于訪問關(guān)系型和非關(guān)系型信息源,例如主機 ISAM/VSAM 和層次數(shù)據(jù)庫,電子郵件和文件系統(tǒng)存儲,文本、圖形和地理數(shù)據(jù)以及自定義業(yè)務(wù)對象。?
OLE DB 定義了一組 COM 接口,對各種數(shù)據(jù)庫管理系統(tǒng)服務(wù)進行封裝,并允許創(chuàng)建軟件組件,實現(xiàn)這些服務(wù)。OLE DB 組件包括數(shù)據(jù)提供程序(包含和表現(xiàn)數(shù)據(jù))、數(shù)據(jù)使用者(使用數(shù)據(jù))和服務(wù)組件(處理和傳送數(shù)據(jù),例如,查詢處理器和游標引擎)。?
OLE DB 接口有助于平滑地集成組件,這樣,OLE DB 組件廠商就可以快速地向市場提供高質(zhì)量 OLE DB 組件。此外,OLE DB 包含了一個連接 ODBC 的“橋梁”,對現(xiàn)用的各種 ODBC 關(guān)系型數(shù)據(jù)庫驅(qū)動程序提供一貫的支持。---號稱取代odbc,但也兼容odbc
DAO(Data Access Objects):數(shù)據(jù)訪問對象是用來顯露了Microsoft Jet數(shù)據(jù)庫引擎(最早是給Microsoft Access 所使用,現(xiàn)在已經(jīng)支持其它數(shù)據(jù)庫),并允許開發(fā)者通過ODBC直接連接到其他數(shù)據(jù)庫一樣,直接連接到 Access 表。DAO 最適用于單系統(tǒng)應(yīng)用程序或在小范圍本地分布使用。其內(nèi)部已經(jīng)對Jet數(shù)據(jù)庫的訪問進行了加速優(yōu)化,而且其使用起來也是很方便的。所以如果數(shù)據(jù)庫是Access數(shù)據(jù)庫且是本地使用的話,建議使用這種訪問方式---應(yīng)用的專一性
RDO(Remote Data Objects)遠程數(shù)據(jù)對象是一個到ODBC的、面向?qū)ο蟮臄?shù)據(jù)訪問接口,它同易于使用的DAO style組合在一起,提供了一個接口,形式上展示出所有ODBC的底層功能和靈活性。盡管RDO在很好地訪問Jet或ISAM數(shù)據(jù)庫方面受到限制,而且它只能通過現(xiàn)存的ODBC驅(qū)動程序來訪問關(guān)系數(shù)據(jù)庫。但是,RDO已被證明是許多SQL Server、Oracle 以及其他大型關(guān)系數(shù)據(jù)庫開發(fā)者經(jīng)常選用的最佳接口。RDO提供了用來訪問存儲過程和復(fù)雜結(jié)果集的更多和更復(fù)雜的對象、屬性,以及方法。---無疑是在odbc基礎(chǔ)上的
ADO(ActiveX Data Object)是DAO/RDO的后繼產(chǎn)物。ADO 2.0在功能上與RDO更相似,而且一般來說,在這兩種模型之間有一種相似的映射關(guān)系。ADO"擴展"了DAO和 RDO 所使用的對象模型,這意味著它包含較少的對象、更多的屬性、方法(和參數(shù)),以及事件。 作為最新的數(shù)據(jù)庫訪問模式,ADO的使用也是簡單易用,所以微軟已經(jīng)明確表示今后把重點放在ADO上,對DAO/RDO不再作升級,所以ADO已經(jīng)成為了當前數(shù)據(jù)庫開發(fā)的主流。 ADO涉及的數(shù)據(jù)存儲有DSN(數(shù)據(jù)源名稱)、ODBC(開放式數(shù)據(jù)連接)以及OLE DB三種方式。后面的例程將詳細講解這三種方式的具體訪問實現(xiàn)。---可以說是對odbc,oledb這些系統(tǒng)級的編程接口的匯接,并對DAO,RDO這些應(yīng)用級的編程接口的升級吧。
----------------------------------------------------------------------------------
OLEDB的性能比較?
有許多種辦法可以連上一個數(shù)據(jù)庫. 你可以用System DSN, DSN-less連接或是本地的OLEDB provider. OLEDB? 這是什么什么玩藝兒? 也許你們中的許多人以前沒有聽說過. 要回答這個問題,我們先得回顧一下數(shù)據(jù)庫連接的歷史.?
早期的數(shù)據(jù)庫連接是非常困難的. 每個數(shù)據(jù)庫的格式都不一樣,開發(fā)者得對他們所開發(fā)的每種數(shù)據(jù)庫的底層API有深刻的了解. 因此,能處理各種各樣數(shù)據(jù)庫的通用的API就應(yīng)運而生了. 也就是現(xiàn)在的ODBC(Open Database Connectivity), ODBC是人們在創(chuàng)建通用API的早期產(chǎn)物. 有許多種數(shù)據(jù)庫遵從了這種標準,被稱為ODBC兼容的數(shù)據(jù)庫.?
ODBC兼容的數(shù)據(jù)庫包括Access, MS-SQL Server, Oracle, Informix等.?
但ODBC并不是完美無缺的,它仍然含有大量的低級的調(diào)用,開發(fā)ODBC應(yīng)用程序仍較困難. 開發(fā)者不得不將大量的精力花在底層的數(shù)據(jù)庫通信中,而不能專注于他們所要處理的數(shù)據(jù). 后來微軟提出了一個解決方案: DAO(Data Access Objects). DAO的代碼看起來象這樣:?
objItem.AddNew?
objItem.Name = "Chair"?
objItem.Price = 10?
objItem.Update?
你也許看過DAO的代碼. 后來DAO演變?yōu)镽DO(Remote Data Objects, 為分布式數(shù)據(jù)庫體系設(shè)計), 再后來是ADO. 盡管它們都有各自的不足之處. 根據(jù)微軟的說法,"ODBC提供了本地SQL數(shù)據(jù)的存取,DAO提供了高級的數(shù)據(jù)對象". DAO和RDO都需要數(shù)據(jù)以SQL(Structured Query Language)的格式存儲. 針對這些缺陷,微軟提出了OLEDB,一個基于COM的數(shù)據(jù)存儲對象,能提供對所有類型的數(shù)據(jù)的操作,甚至能在離線的情況下存取數(shù)據(jù)(比方說,你使用的是你的便攜機,你可以毫不費力地看到最后一次數(shù)據(jù)同步時的數(shù)據(jù)映像).?
????????? 這可以看出來,出現(xiàn)的順序是:?ODBC——>DAO——>RDO——>OLEDB——>ADO
OLEDB位于ODBC層與應(yīng)用程序之間. 在你的ASP頁面里,ADO是位于OLEDB之上的"應(yīng)用程序". 你的ADO調(diào)用先被送到OLEDB,然后再交由ODBC處理. 你可以直接連接到OLEDB層,如果你這么做了,你將看到服務(wù)器端游標(recordset的缺省的游標,也是最常用的游標)性能的提升. 那我們該如何直接連接到OLEDB呢??
ODBC-->OLEDB-->ADO-->應(yīng)用程序
想直接連到OLEDB層,你必須改變你的connection對象連接字符串. 先用老辦法創(chuàng)建一個connectiong對象:?
Dim objConn?
Set objConn = Server.CreateObject("ADODB.Connection")?
接下去,我們不用常規(guī)的類似DSN=pubs or DRIVER={MS SQL-?
Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine的連接字符串,而采用下面的連接字符串:?
objConn.ConnectionString = "Provider=ProviderName; Data?
Source=DatabaseSource; Initial Catalog=DatabaseName; User ID=UserID;?
Password=Password"?
對于SQL:?
ProviderName = SQLOLEDB?
Data Source = Server Name?
Initial Catalog = Database Name?
對于Access:?
ProviderName = Microsoft.Jet.OLEDB.3.51?
Data Source = Full path to .MDB file?
下面讓我們來看兩個例子,一個是針對Access的,還有一個是針對SQL的.
?
?如果你的連接SQL的DSN-less連接串是這樣的(用dsn連接的時候):?
DRIVER={MS SQL-Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine?
那么直接連接到OLEDB的連接字符串應(yīng)該是這樣的:?
Provider=SQLOLEDB; Data Source=myMachine; Initial Catalog=pubs; User?
ID=sa; Password=?
讓我們來看看Access,如果你的Access的連接字符串是(用dsn連接的時候):?
DRIVER={Microsoft Access Driver (*.mdb)};?
DBQ=c:\inetpub\wwwroot\users.mdb?
那么直接連接到OLEDB的連接字符串應(yīng)該是這樣的:?
Provider=Microsoft.Jet.OLEDB.3.51; Data?
Source=c:\inetpub\wwwroot\users.mdb
就是這么簡單,挺棒的吧??
這很重要嗎??
現(xiàn)在你也許對為什么要學(xué)習(xí)這種新的數(shù)據(jù)庫連接方法感到有些兒迷惑,為什么不走標準的DSN-less/System DSN路子呢? 讓我來告訴你為什么. 據(jù)Wrox出的ADO 2.0?
Programmer's Reference一書中的測試,用OLEDB連接而不是DSN或DSN-less的連接會得到的性能提升如下:?
性能比較?
?? SQL??????????????? ?Access?
OLEDB DSN OLEDB DSN?
Connection Times: 18 82 Connection Times: 62 99?
Iterating through 1,000 Records Times: 2900 5400 Iterating through?
1,000 Records Times: 100 950
=================================================================================================
下面這個百度知道里面的,回答的很精彩:
=================================================================================================
ODBC(開放數(shù)據(jù)庫互連):是Microsoft引進的一種早期數(shù)據(jù)庫接口技術(shù)。它實際上是ADO的前身。早期的數(shù)據(jù)庫連接是非常困難的. 每個數(shù)據(jù)庫的格式都不一樣,開發(fā)者得對他們所開發(fā)的每種數(shù)據(jù)庫的 底層API有深刻的了解. 因此,能處理各種各樣數(shù)據(jù)庫的通用的API就應(yīng)運而生了. 也就是現(xiàn)在的ODBC(Open Database Connectivity), ODBC是人們在創(chuàng)建通用API的早期產(chǎn)物. 有許多種數(shù)據(jù)庫 遵從了這種標準,被稱為ODBC兼容的數(shù)據(jù)庫. OLEDB(對象鏈接和嵌入數(shù)據(jù)庫):位于ODBC層與應(yīng)用程序之間. 在你的ASP頁面里,ADO是位于OLEDB之上的"應(yīng)用程序". 你的ADO調(diào)用先被送到OLEDB,然后再交由ODBC處理. 你可以直接連接到OLEDB層, 如果你這么做了,你將看到服務(wù)器端游標(recordset的缺省的游標,也是最常用的游標)性能的提升. 用odbc連接數(shù)據(jù)庫: odbc中提供三種dsn,它們的區(qū)別很簡單: 用戶dsn只能用于本用戶。 系統(tǒng)dsn和文件dsn的區(qū)別只在于連接信息的存放位置不同:系統(tǒng)dsn存放在odbc儲存區(qū)里,而文件dsn則放在一個文本文件中。 它們的創(chuàng)建方法就不說了。 用dsn連接數(shù)據(jù)庫: 在asp中使用它們時,寫法如下: A.sql server: 用系統(tǒng)dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname" 用文件dsn: connstr="FILEDSN=xx;UID=xx; PWD=xxx;DATABASE=dbname" 還可以用連接字符串(從而不用再建立dsn): connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx" B.access: 用系統(tǒng)dsn: connstr="DSN=dsnname" (或者為:connstr="DSN=dsnname;UID=xx;PWD=xxx") 用文件dsn: connstr="FILEDSN=xx" 還可以用連接字符串(從而不用再建立dsn): connstr="DRIVER={Microsoft Access Driver};DBQ=d:\abc\abc.mdb" 用oledb連接數(shù)據(jù)庫: A.sql server: connstr="PROVIDER=SQLOLEDB; DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname" B.access: connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=c:\abc\abc.mdb" 值得注意的是,OLE DB對ODBC的兼容性,允許OLE DB訪問現(xiàn)有的ODBC數(shù)據(jù)源。其優(yōu)點很明顯,由于ODBC相對OLE DB來說使用得更為普遍,因此可以獲得的ODBC驅(qū)動程序相應(yīng)地要比OLE DB的要多。 這樣不一定要得到OLE DB的驅(qū)動程序,就可以立即訪問原有的數(shù)據(jù)系統(tǒng)。提供者位于OLE DB層,而驅(qū)動程序位于ODBC層。如果想使用一個ODBC數(shù)據(jù)源,需要使用針對ODBC的OLE DB提供者,它會接著 使用相應(yīng)的ODBC驅(qū)動程序。如果不需要使用ODBC數(shù)據(jù)源,那么可以使用相應(yīng)的OLE DB提供者,這些通常稱為本地提供者(native provider)。可以清楚地看出使用ODBC提供者意味著需要一個額外的 層。因此,當訪問相同的數(shù)據(jù)時,針對ODBC的OLE DB提供者可能會比本地的OLE DB提供者的速度慢一些。 posted on 2011-12-09 00:33?初學(xué)者心態(tài) 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/jinianjun/archive/2011/12/09/2281442.html
總結(jié)
以上是生活随笔為你收集整理的ODBC / OLEDB___DAO / RDO / ADO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server 修改表字段
- 下一篇: 2019ICPC南京网络赛A题 Th