其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源_第1頁
其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源_第2頁
其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源_第3頁
其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源_第4頁
其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、史前那時候每個數(shù)據(jù)庫供應商(其實也沒幾個)都有自己的數(shù)據(jù)庫操作API,每個數(shù)據(jù)庫的調用函數(shù)、操作語句各不相同。因此,每個應用程序只能使用一個固定的數(shù)據(jù)庫,想換數(shù)據(jù)庫?沒門!你要全部重寫應用程序中的數(shù)據(jù)庫操作代碼。后來國際標準化組織ISO- International Organization for Standardization、IBM等說不行,這么亂,程序員怎么活?。∮谑翘岢隽薈LI(Call-Level Interface)。每個數(shù)據(jù)庫的CLI(驅動程序)基本上相同,程序員總算好過點了??墒且獡Q數(shù)據(jù)庫,你寫的程序需要重新編譯或安裝。再后來MS的ODBC(Open DataDase Con

2、nectivity,開放數(shù)據(jù)庫互連)來了,并一度成為數(shù)據(jù)庫通信的標準。ODBC它將所有對數(shù)據(jù)庫的底層操作(即CLI)全部隱藏在ODBC的驅動程序內核里。使用時,ODBC會動態(tài)裝載各個數(shù)據(jù)庫的CLI,把函數(shù)調用轉換成對每個數(shù)據(jù)庫的CLI調用。此時,數(shù)據(jù)庫應用程序總算和數(shù)據(jù)庫供應商沒什么關系了。(圖形ODBC)再再后來在一切“對象化”的趨勢下, MS提出了OLE DB(Object Linking and Embedding DB,對象連接和嵌入(法)數(shù)據(jù)庫),并打算用它取代ODBC。OLE DB也需要每個數(shù)據(jù)庫提供一個CLI(現(xiàn)在叫Provider)。OLE DB標準的核心內容就是要求各種數(shù)據(jù)存

3、儲都提供一種相同的訪問接口。這種接口封裝了各種數(shù)據(jù)系統(tǒng)的訪問操作,使數(shù)據(jù)的使用者(應用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點、格式或類型。因此,OLE DB標準實際上是規(guī)定了數(shù)據(jù)使用者和提供者之間的一種應用層的協(xié)議(Application-Level protocol)。它可以訪問的數(shù)據(jù)包括標準的關系型數(shù)據(jù)庫中的數(shù)據(jù),還包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務,以及主機數(shù)據(jù)庫(如DB2)、服務器數(shù)據(jù)庫(如Oracle和SQL Server)和桌面數(shù)據(jù)庫(如Access)。OLE DB分兩種:直接的OLE DB:只要提供了Provider的數(shù)據(jù)庫都能使用。面向OD

4、BC的OLE DB:為讓那些只提供有ODBC而無Provider的數(shù)據(jù)庫也可以通過OLE DB訪問,MS提供了一個面向ODBC的Provider。不過因為要經(jīng)過兩層,效率會稍微降低。所以現(xiàn)在多數(shù)數(shù)據(jù)庫會提供自己的Provider。再再再后來MS說OLE DB的接口還是太復雜了。程序員也就調調QUERY,沒必要搞這么復雜吧!于是提出了ADO。ADO其實只是一個應用程序層次的接口,它通過在OLE DB上封裝來簡化使用方法,實現(xiàn)與數(shù)據(jù)庫通信,從而更好的解放了程序員在操作數(shù)據(jù)庫時的麻煩。ADO可處理各種OLE DB支持的數(shù)據(jù)源。新世紀到了MS也發(fā)明了.NET,為了適應新世紀新潮流也提出了ADO.NET

5、,這部分的有待學習。不過我感覺還是在原ADO上面繼續(xù)封裝吧。-ODBC詳解:如圖所示,應用程序通過ODBC接口訪問不同數(shù)據(jù)源中的數(shù)據(jù),每個不同的數(shù)據(jù)源類型由一個驅動程序支持。驅動程序管理器自動為應用程序裝入合適的驅動程序,大大簡化了對數(shù)據(jù)庫的訪問,也為程序的跨平臺開發(fā)和移植提供了極大的方便。ODBC可對大多數(shù)類型數(shù)據(jù)庫提供支持,包括dBase、Informix、Access、SQL Server和Oracle等,還可對一些其他類的數(shù)據(jù)庫文件提供支持,如文本、Excel電子表格等。對于MS ODBC還不支持的一些特殊數(shù)據(jù)庫,只要安裝數(shù)據(jù)庫廠商提供的ODBC程序,也能在程序中直接對數(shù)據(jù)庫進行操作。

6、由圖可知,ODBC由ODBC與應用程序的接口、驅動程序管理器、驅動程序和具體的數(shù)據(jù)源(DSN)等部分組成。其中,數(shù)據(jù)庫驅動程序使用數(shù)據(jù)源定位和標識具體的ODBC能兼容的數(shù)據(jù)庫,而具體的數(shù)據(jù)源則需要創(chuàng)建。在windows系統(tǒng)中,可通過控制面板中的“ODBC數(shù)據(jù)源”管理器創(chuàng)建DSN,也可使用連接字符串如conn="DRIVER=SQL SERVER;SERVER=servername;UID=xx;PWD=xxx"創(chuàng)建臨時DSN,實現(xiàn)與數(shù)據(jù)庫的連接。ODBC數(shù)據(jù)源管理器中提供三種DSN,它們的區(qū)別很簡單:用戶DSN只能供創(chuàng)建該DSN的用戶在當前機器中使用。因此ASP等

7、遠程操作不能使用它。系統(tǒng)DSN允許任何有登陸權限的用戶訪問。因此,供Web應用程序訪問時,通常建立系統(tǒng)DSN。文件DSN和系統(tǒng)DSN的區(qū)別只在于連接信息的存放位置不同:系統(tǒng)DSN信息保存在OS注冊表中,而文件DSN則放在后綴名為dsn的一個文本文件中。因此,文件DSN的優(yōu)點是便于和對應的數(shù)據(jù)庫以及應用程序一起移植,而系統(tǒng)DSN的優(yōu)點則是便于修改。-在asp中的連接方法對比:使用ODBC時,寫法如下: 用系統(tǒng)DSN:connstr="DSN=DSNname; UID=xx; PWD=xxx;DATABASE=dbname" 用文件DSN:connstr=&

8、quot;FILEDSN=xx;UID=xx; PWD=xxx;DATABASE=dbname" 用連接字符串(不用建立DSN):conn=" Driver =SQL SERVER;SERVER=servername;UID=xx;PWD=xxx" conn="Driver=microsoft odbc for oracle;server=oramr;uid=mr;pwd=mr"conn="Driver=Microsoft Excel Driver (*.xls);DriverId=790; Dbq="+

9、server.mappath("mrdb.xls")conn="Driver=Microsoft Text Driver (*.txt; *.csv); Dbq="+server.mappath(".")+"Extensions=asc,csv,tab,txt; Persist Security Info=False"使用OLE DB時,寫法如下:conn="Provider=SQL OLE DB; Data source=servername;UID=xx;PWD=xxx;Database=dbname

10、" conn="Provider=Microsoft.jet. OLEDB.4.0; Data source =c:abcabc.mdb" 性能對比:                       sql           

11、60;   access                    OLE DB      DSN     OLE DB      DSN 連接時間:   

12、0;      18         82        62        99查詢1,000條記錄:   100       150     &#

13、160;2900      5400   顯然,OLE DB鏈接方式相對于DSN有很大的優(yōu)勢.購買虛擬主機的小站,大多是php+mysql或者asp+access的組合,一般沒有DSN數(shù)據(jù)源的配置,而且我們也不需要.同時mssql是一種昂貴的數(shù)據(jù)庫,如果使用效率低下的access,我們應該盡量的減少數(shù)據(jù)庫引擎的壓力.我經(jīng)??匆娨恍┱军c給出提示:數(shù)據(jù)庫連接失敗,顯然,又是access出毛病了.這兩者在性能上也有一定的差別.下面是一個測試文件,對兩者進行比較.<%dim openmode,action,

14、db,openstr,rs,connopenmode=request.QueryString("openmode")action=request.QueryString("action")db="#niceidea.mdb"set conn=server.createobject("adodb.connection")if openmode="OLE DB" then openstr="provider=microsoft.jet.OLE DB.

15、4.0;" & "data source = " & server.mappath(db)if openmode="odbc" then  openstr="Driver=Microsoft Access Driver (*.mdb);DBQ=" &Server.Mappath(db) Dim strStartTimeDim 

16、;strEndTimestrStartTime = Timer '開始時間'反復打開數(shù)據(jù)庫50次if action="open" thenfor i=1 to 50conn.open(openstr)conn.closenextset conn=nothingend if'移動記錄集10000次if action="move" thenconn.open(openstr)set rs=conn.exec

17、ute("select * from visitor")for i=1 to 10000rs.movenextnextrs.closeset rs=nothingconn.closeset conn=nothingend if'反復打開記錄集1000次if action="getrs" thenconn.open(openstr)set rs=server.CreateObject("adodb.recordset&q

18、uot;)dim sqlstrsqlstr="select * from visitor"for i=1 to 1000rs.open sqlstr,conn,1,1rs.closenextset rs=nothingconn.closeset conn=nothingend if%><html><head><meta http-equiv="Content-Type" content=&q

19、uot;text/html; charset=gb2312"><title>數(shù)據(jù)庫鏈接方式測試</title></head><body><ul> <li><a href="test.asp?openmode=odbc&action=open">odbc打開數(shù)據(jù)庫50次</a></li> <li><a href="test.asp?openmode=OLE DB&

20、;action=open">OLE DB打開數(shù)據(jù)庫50次</a></li> <li><a href="test.asp?openmode=odbc&action=move">odbc移動記錄10000次</a></li> <li><a href="test.asp?openmode=OLE DB&action=move">OLE DB移動記錄10000次</a></li&

21、gt; <li><a href="test.asp?openmode=odbc&action=getrs">odbc打開記錄1000次</a></li> <li><a href="test.asp?openmode=OLE DB&action=getrs">OLE DB打開記錄1000次</a></li> </ul><p><%' 加載完畢的時間strEndTime = TimerResponse.Write ("運行處理時間: ")Response.Write 1000*(strEndTime - strStartTime)Response.Write (" 毫秒.")response.end%></p></body></html>得到的數(shù)據(jù)如下:odbc反復打開數(shù)據(jù)庫50次:6062.5 毫秒.OLE DB反復打開數(shù)據(jù)庫50次:46

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論