最近在學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 則用於訪問關系型和非關系型信息源。
五.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)