1. 程式人生 > >資料庫訪問介面(ODBC、OLE DB、ADO)

資料庫訪問介面(ODBC、OLE DB、ADO)

最近在學C#的資料庫程式設計,對於資料庫介面技術這塊的知識一直比較模糊,網上查了不少資料,看了幾天還是朦朦朧朧的,只能做些筆記再研究了。

我們都知道,“資料庫”是指一組相關資訊的集合,最早的計算機應用之一也是開發資料庫系統,即通過計算機來儲存和檢索資料的機制。

在資料庫發展的前幾十年裡,資料以各種不同的方式儲存並展現給使用者,比如:層次資料庫網狀資料庫,這些都是非關係資料庫。

直到1970年,才出現了“關係模型”,藉助冗餘資料來連結不同表中的記錄,關係資料庫中的每張表都包含一項作為每行唯一標識的資訊(主鍵)。

關係型資料庫:

Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL

非關係型資料庫:

NoSql、Cloudant、MongoDb、redis、HBase

  在最初的時候,對資料庫的程式訪問是由本機庫來執行的,例如SQL Server的DBLib、Oracle的OCI。

這種方式的優點就是速度快,但缺點更明顯,開發人員需使用不同的API來訪問不同的資料庫系統。一旦更換資料庫,工作量將會很大。

  一.ODBC(Open Database Connectivity)開放資料庫連線

是為解決異構資料庫間的資料共享而產生的,允許應用程式以SQL 為資料存取標準,存取不同DBMS(關係型資料管理系統)管理的資料;

使應用程式直接操縱DB中的資料,免除隨DB的改變而改變。用ODBC 可以訪問各類計算機上的DB檔案,甚至訪問如Excel 表和ASCI I資料檔案這類非資料庫物件。

它建立了一組規範,並提供了一組對資料庫訪問的標準API(應用程式程式設計介面)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支援,使用者可以直接將SQL語句送給ODBC。

總而言之,ODBC提供了一個公共資料訪問層,可用來訪問幾乎所有的RDBMS。

  優點:一個基於ODBC的應用程式對資料庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的資料庫操作由對應的DBMS的ODBC驅動程式完成。也就是說,不論是FoxPro、Access還是Oracle資料庫,均可用ODBCAPI進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的資料庫。

  二.DAO(Data Access Object

)資料訪問物件

它顯露了 Microsoft Jet 資料庫引擎(由 Microsoft Access 所使用),並允許 Visual Basic 開發者通過 ODBC 像直接連線到其他資料庫一樣,直接連線到 Access 表。

所以如果資料庫是Access資料庫且是本地使用的話,建議使用這種訪問方式

  三.RDO(Remote Data Objects)遠端資料物件

讓寫Windows應用程式的程式師能夠進入微軟和其他的資料庫供給者的資料庫。然後,程式中RDO 陳述使用微軟的底層資料存取物件 (DAO) 來實際進入資料庫。 資料庫供給者寫入DAO介面。

是一個到 ODBC 的、面向物件的資料訪問介面,它同易於使用的 DAO style組合在一起,提供了一個介面,形式上展示出所有 ODBC 的底層功能和靈活性。儘管 RDO 在很好地訪問 Jet 或 ISAM 資料庫方面受到限制,而且它只能通過現存的 ODBC 驅動程式來訪問關係資料庫。但是,RDO 已被證明是許多 SQL Server、Oracle 以及其他大型關係資料庫開發者經常選用的最佳介面。RDO 提供了用來訪問儲存過程和複雜結果集的更多和更復雜的物件、屬性,以及方法。

  四.OLE DB(Object Linking and Embedding, Database)物件連線嵌入資料庫

是微軟的戰略性的通向不同的資料來源的低階應用程式介面,OLE DB不僅包括微軟資助的標準資料介面ODBC的結構化查詢語言(SQL)能力,還具有面向其他非SQL資料型別的通路。

OLE DB 是建立在 ODBC 功能之上的一個開放規範。ODBC 是為訪問關係型資料庫而專門開發的,OLE DB 則用於訪問關係型和非關係型資訊源

 

OLE DB 最主要是由三個部分組合而成:

 

Data Providers 資料提供者

 

凡是透過OLE DB 將資料提供出來的,就是資料提供者。例如SQL Server 資料庫中的資料表,或是附檔名為mdb 的Access 資料庫檔案等,都是Data Provider。

 

Data Consumers 資料使用者

 

凡是使用OLE DB 提供資料的程式或元件,都是OLE DB 的資料使用者。換句話說,凡是使用ADO 的應用程式或網頁都是OLE DB 的資料使用者。

 

Service Components 服務元件

 

資料服務元件可以執行資料提供者以及資料使用者之間資料傳遞的工作,資料使用者要向資料提供者要求資料時,是透過OLE DB 服務元件的查詢處理器執行查詢的工作,而查詢到的結果則由指標引擎來管理。   OLE DB 與ODBC 的關係 由於OLE DB 和ODBC 標準都是為了提供統一的訪問資料介面,所以曾經有人疑惑:OLE DB 是不是替代ODBC 的新標準?答案是否定的。實際上,ODBC 標準的物件是基於SQL 的資料來源(SQL-Based Data Source),而OLE DB 的物件則是範圍更為廣泛的任何資料儲存。從這個意義上說,符合ODBC 標準的資料來源是符合OLE DB 標準的資料儲存的子集。符合ODBC 標準的資料來源要符合OLE DB 標準,還必須提供相應的OLE DB 服務程式(Service Provider),就像SQL Server 要符合ODBC 標準,必須提供SQL Server ODBC 驅動程式一樣。現在,微軟自己已經為所有的ODBC 資料來源提供了一個統一的OLE DB 服務程式,叫做ODBC OLE DB Provider。

 

  五.ADO(ActiveX Data Object)活動資料物件

 ADO是DAO/RDO的後繼產物。ADO 2.0在功能上與RDO更相似,而且一般來說,在這兩種模型之間有一種相似的對映關係。ADO"擴充套件"了DAO和 RDO 所使用的物件模型,這意味著它包含較少的物件、更多的屬性、方法(和引數),以及事件。 作為最新的資料庫訪問模式,ADO的使用也是簡單易用,所以微軟已經明確表示今後把重點放在ADO上,對DAO/RDO不再作升級,所以ADO已經成為了當前資料庫開發的主流。 ADO涉及的資料儲存有DSN(資料來源名稱)、ODBC(開放式資料連線)以及OLE DB三種方式。後面的例程將詳細講解這三種方式的具體訪問實現。---可以說是對odbc,oledb這些系統級的程式設計介面的匯接,並對DAO,RDO這些應用級的程式設計介面的升級吧。

ODBC 、DAO 、ADO 、OLEDB 資料庫連線方式區別及聯絡

ODBC 是一種底層的訪問技術,因此,ODBC API 可以是客戶應用程式能從底層設定和控制資料庫,完成一些高階資料庫技術無法完成的功能;但不足之處由於ODBC只能用於關係型資料庫,使得利用ODBC很難訪問物件資料庫及其他非關係資料庫。
DAO 提供了一種通過程式程式碼建立和操縱資料庫的機制。最大特點是對MICROSOFT JET資料庫的操作很方便,而且是操作JET資料庫時效能最好的技術介面之一。並且它並不只能用於訪問這種資料庫,事實上,通過DAO技術可以訪問從文字檔案到大型後臺資料庫等多種資料格式。
ADO是基於OLE DB的訪問介面,它是面向物件的OLE DB技術,繼承了OLE DB的優點。屬於資料庫訪問的高層介面。

名詞解釋:

ODBC(Open DataBase Connectivity)開放資料庫互聯。是由微軟主導的資料庫連結標準。

MFC(Microsoft Foundation Class)微軟基礎類。MFC ODBC是對ODBC的封裝。

DAO(Data Access Object)資料訪問物件。不提供遠端訪問功能。

RDO(Remote Data Object)遠端資料物件。速度快,支援SQL Server儲存過程,同DAO一樣是發展很多年了的技術。

OLE-DB(Object Linking and Embedding DataBase)物件連結和嵌入資料庫。它依賴於COM和提供OLE DB提供者的廠商而非ODBC使用的SQL。

ADO(ActiveX Data Object)ActiveX資料物件。基於OLE-DB建立連線的區域性和遠端資料庫訪問技術。同OLE-DB一樣要“年輕”些。
使用中,我們一般用OLE-DB和ADO替代DAO和RDO。


ADO和OLEDB之間的關係

OLEDB是一種底層資料訪問介面介面。是用於第三方驅動程式商家開發輸出資料來源到ADO-技術的應用程式或用於C++的開發者開發定製的資料庫元件。
OLE DB 是用於訪問資料的重要的系統級程式設計介面,它是 ADO 的基礎技術,同時還是 ADO.NET 的資料來源。

ADO 是基於OLE DB的訪問介面,它是面向物件的OLE DB技術,繼承了OLE DB的優點。屬於資料庫訪問的高層介面。

可以這麼說,ADO為OLEDB提供高層應用API函式。

 

各種資料介面的連線方式

一、ADO連線
1、連線access資料庫
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("dbname(路徑全名)")
2、連線SQL Server資料庫
set conn=server.CreateObject("ADODB.Connection")
sql="Driver={SQL Server};server=(local);uid=sa;pwd=sa;database=dbname"
conn.open(sql)

二、ODBC連線(必須先註冊資料來源---DSN)
(列舉配置SQL Server資料庫檔案DSN,開啟管理工具---資料來源(ODBC)---開啟系統DSN選項卡---單擊新增按鈕---從列表中選擇SQL Server,單擊完成---在名稱中輸入資料庫名稱,在你想連線的SQL Server伺服器中輸入(local)---按嚮導提示完成)
1、連線access資料庫
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=註冊名"
2、連線SQL Server資料庫
set conn=Server.CreateObject("ADODB.Connection")
conn.connectionstring="DSN=註冊名;UID=sa;PWD=sa;"
conn.open

三、OLEDB連線資料庫
1、連線access資料庫
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.MapPath("dbname(路徑全名)")&";Persist Security Info=False"
set rs=Server.CreateObject("ADODB.Recordset")
2、連線SQL Server資料庫
set conn=server.CreateObject("ADODB.Connection")
sql="Provider=SQLOLEDB;data source=(local);initial catalog=dbname;User ID=sa;password=sa;"
conn.open(sql)