數據庫訪問接口(ODBC、OLE DB、ADO)

最近在學C#的數據庫編程,對於數據庫接口技術這塊的知識一直比較模糊,網上查了很多資料,看了幾天仍是朦朦朧朧的,只能作些筆記再研究了。redis

咱們都知道,「數據庫」是指一組相關信息的集合,最先的計算機應用之一也是開發數據庫系統,即經過計算機來存儲和檢索數據的機制。sql

在數據庫發展的前幾十年裏,數據以各類不一樣的方式存儲並展示給用戶,好比:層次數據庫網狀數據庫,這些都是非關係數據庫。數據庫

直到1970年,纔出現了「關係模型」,藉助冗餘數據來連接不一樣表中的記錄,關係數據庫中的每張表都包含一項做爲每行惟一標識的信息(主鍵)。編程

關係型數據庫:服務器

Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQLapp

非關係型數據庫:ide

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函數。

 

各類數據接口的鏈接方式

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

2、ODBC鏈接(必須先註冊數據源---DSN)
(列舉配置SQL Server數據庫文件DSN,打開管理工具---數據源(ODBC)---打開系統DSN選項卡---單擊添加按鈕---從列表中選擇SQL Server,單擊完成---在名稱中輸入數據庫名稱,在你想鏈接的SQL Server服務器中輸入(local)---按嚮導提示完成)
一、鏈接access數據庫
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=註冊名"
二、鏈接SQL Server數據庫
set conn=Server.CreateObject("ADODB.Connection")
conn.connectionstring="DSN=註冊名;UID=sa;PWD=sa;"
conn.open

3、OLEDB鏈接數據庫
一、鏈接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")
二、鏈接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)

 

相關文章
相關標籤/搜索