對於一個剛接觸數據庫的菜鳥來說(比如我),總是搞不清SQL、ADO、OLE DB、ODBC,大腦中一片混亂,好像懂了,又好像沒懂,非常的苦惱,今天下了點功夫研究了一下,貼出來,其中肯定有好多錯誤,希望大鳥們拍磚,為了我也是為了他人。
先貼一張圖片,咱看圖說話:
先說ADO、ODBC、OLE DB這三者的關系:
ADO的概念:ADO (ActiveX Data Objects) 是一個用於存取數據源的COM組件。它提供了編程語言和統一數據訪問方式OLE DB的一個中間層。允許開發人員編寫訪問數據的代碼而不用關心數據庫是如何實現的,而只用關心到數據庫的連接。訪問數據庫的時候,關於SQL的知識不是必要的,但是特定數據庫支持的SQL命令仍可以通過ADO中的命令對象來執行。
ODBC的概念:ODBC:開放數據庫互連(ODBC)是Microsoft引進的一種早期數據庫接口技術,開放數據庫互連(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,並提供了一組對數據庫訪問的標准API(應用程序編程接口)。這些API利用SQL來完成其大部分任務。
OLE DB的概念:OLE DB(OLEDB)是微軟的戰略性的通向不同的數據源的低級應用程序接口。OLE DB不僅包括微軟資助的標准數據接口開放數據庫連通性(ODBC)的結構化問題語言(SQL)能力,還具有面向其他非SQL數據類型的通路。作為微軟的組件對象模型(COM)的一種設計,OLE DB是一組讀寫數據的方法(在過去可能被稱為渠道)。
個人鄙見:從上面我標出來的紅色字體不難看出,ODBC和OLE DB都是應用程序接口,都是為了應用程序訪問數據庫定制的一組標准,而ODBC是曾經的數據庫通信標准,而OLE DB是在一切對象化的趨勢下,微軟打算用它取代ODBC,OLEDB分兩種:直接的OLEDB和面向ODBC的OLEDB,后者架構在ODBC上,這樣沒有自己的OLEDB提供者的數據庫也可以使用OLEDB的特點了。OLEDB的效率要高於ODBC,而且OLEDB要包含ODBC。
至於ADO:是一個應用程序層次的界面,它用oledb來與數據庫通信 ,是應用程序和OLEDB中間的一層。為什么要添加這一層呢,開發人員直接使用OLEDB去和數據庫通信不就可以了嗎,因為OLEDB相對來說底層一些,直接操作它的難度也就大一些,所以微軟為了開發人員的簡潔性就推出了ADO,我覺得這里還和降低耦合有點關系。
再說SQL和ADO的關系:
SQL的概念:SQL(Structured Query Language)結構化查詢語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫系統。
ADO的概念:如上,不再贅述。
個人鄙見:SQL它是一個標准的數據庫查詢語言,用於操縱數據庫;而ADO則是數據聯接方式,就是通過什么方式或者說通過什么數據庫組件來讓你聯接到數據庫; 換句話說,ADO是讓你聯接到數據庫(建立通路),而SQL是在這個通路的基礎上進行對數據的操作,SQL定義了如何對數據庫進行操作(增減改查),ADO為這個操作提供了可能(Execute方法)。其實ODBC本身也提供了對SQL語言的支持,用戶也可以直接將SQL語句送給ODBC。
addnew與insert into的區別:
AddNew方法是ADO中RecordSet對象的一個方法,Insert Into是SQL的一個語句(也是需要通過ADO對象完成的)。ADO 的 AddNew 方法是將 Insert Into 語句封裝了起來,所以,當對大量數據進行操作時,直接使用 SQL 語句將會大大加快存取數據的速度,因為它減少了 ADO 的“翻譯”時間。
ADO中Command對象和Connection對象的Execute方法的區別:
connection對象相對command對象的功能要強大,所以實際編程中很少用command對象.
區別:connection對象執行SQL語句后的結果是可以自由移動的結果集,command對象執行SQL語句的結果是只讀,逐行向下讀取的結果集.
至於什么時候用conn與cmd,要看情況而言,程序比較簡單的時候用哪個都行,復雜時一般用conn

