| ActiveX 資料對象 (ADO) 是一種既便於使用又可擴充的技術,用來將資料庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的指令碼以串連到與 OLE DB 相容的資料來源,如資料庫、試算表、順序資料檔案或電子郵件目錄。OLE DB 是一個系統級的編程介面,它提供一套標準的 COM 介面,用來展示資料庫管理系統的功能。使用 ADO 的物件模型,您可以輕鬆地(使用 VBScript 或 JScript 等指令碼語言)訪問這些介面並將資料庫功能添加到您的 Web 應用程式中。另外,您還可以使用 ADO 訪問與開放式資料庫互連 (ODBC) 相容的資料庫。 |
| 如果您是一位對資料庫互連知識有一定瞭解的指令碼編寫者,您將會發現 ADO 的命令文法很簡單,而且很容易使用。如果您是一位經驗豐富的開發人員,您將會非常欣賞 ADO 提供的這種可升級的對各種資料來源的高效能訪問。 |
| 一般的網頁訪問中訪問資料庫是按照下列步驟進行的,首先建立一個ADODB.Connection 介面的對象,接著在這一個對象上綁定相應的資料來源(可以用有名資料來源和無名資料來源),根據需要建立或者不建立記錄集,然後在該資料來源上連結用執行或開啟的方法來對相應的表進行操作。 |
| Set oConn=Server.CreateObject(“ADODB.Connection”) |
| Set oRS=Server.CreateObject(“ADODB.RecordSet”) |
| set strConn="Provider=SQLOLEDB;User ID=sa; Initial Catalog=Pubs;Data Source=" &request.ServerVariables("SERVER_NAME") |
| set ORS=oConn.execute(“select * from test”) |
| 以上介紹了無名連結的OLEDB的使用方法,如果是有名連結,設為資料來源test,使用者名稱和口令均為空白,則只需要改寫一下上述語句oConn.open “test”,””,”” |
| 上面簡要介紹了一下對於網頁中涉及到資料庫訪問的一般方法,這些已經是很成熟的,也是很有用的,如果在實際中對於某些資料的存取過於複雜,需要近10條SQL語句才能寫完,那麼這種方法就有點欠缺,另外有些時候需要使用相同的處理過程,而在不同的網頁中使用,而這用預存程序則是最有利的,還有一個最大特點是預存程序對於技術的保密性相對高些,它儲存於遠端伺服器的資料庫內。 |
| 在ADO中提供了對預存程序的訪問,它需要用到command對象,在這個對象上使用者可以直接執行SQL伺服器的預存程序,而命令中所需要的參數可以藉助於其屬性Pamaters來進行處理。 |
| 注意 一個 Command 對象要想有效,必須和一個 Connection 對象相關聯,方法是Command 對象的 ActiveConnection 屬性就被設定到這個 Connection 對象。如果一個 Connection 對象不能被標識,在您將它與一個串連關聯之前,Command 對象是無效的。 |
| Set oConn = Server.CreateObject("ADODB.Connection") |
| set oCmd = Server.CreateObject("ADODB.Command") |
| set ors1=Server.CreateObject("ADODB.RecordSet") |
| ' 開啟連結,使用使用者標識SA,口令為空白,串連為本機伺服器上的資料庫 |
| strConn="Provider=SQLOLEDB;User ID=sa;Initial Catalog=pubs;Data Source="& Request.ServerVariables("SERVER_NAME") |
| '如果串連一個遠端的資料庫,該資料庫地址為:10.82.88.105,使用者為tmp,口令為123, |
| ‘ strConn="Provider=SQLOLEDB;User ID=tmp;pwd=123;Initial Catalog=tjbb;Data Source="& "10.82.88.110" |
| Set oCmd.ActiveConnection = oConn |
| ' 設定調用預存程序byroyalty和參數,參數由?引入 |
| oCmd.CommandText = "{call byroyalty(?)}" |
| oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput) |
| ‘在asp中上述輸入參數的使用也可不用參數屬性來實現直接用VB中的&來形成命令文本中對應的資料即可 |
| ors1.activeconnection=oconn |
| ‘該命令對象中也可應用一般的SQL語句使用Source和open屬性,其中source指出資料來源 |
| ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1" |
| ors1.cursortype=adopenstatic |
| 利用SQL的語言可以編寫對於資料庫訪問的預存程序,其文法如下: |
| CREATE PROC[EDURE] procedure_name [;number] |
| {@parameter data_type} [VARYING] [= default] [OUTPUT] |
| 例: 若使用者想建立一個刪除表tmp中的記錄的預存程序Select_delete可寫為: |
| Create Proc select_del As |
| create proc select_query @year int as |
| select * from tmp where year=@year |
| 例:該預存程序是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由預存程序來擔當,在網頁中重複使用達到共用。 |
| CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output |
| declare @result varchar(80) |
| declare @dwmc varchar(80) |
| select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold |
| while (@stop=1) and (@dwid<>0) |
| select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold |
| set @result=@dwmc+@result |
| if (@dwid=0) or (@@rowcount=0) |
| set @dwmcresult=rtrim(@result) |
| 充分合理地利用預存程序,可以提高伺服器吞吐能力,筆者利用預存程序來從近20個表中擷取資料群組合成一個通用的表,產生近2萬條記錄,而所需時間約7秒鐘,如果這種操作藉助於較合理的動態網頁可以將伺服器開發提高到一個高度,充分利用預存程序,可以減輕網頁設計帶來的繁重處理,而使所編寫的代碼得到共用和合理的利用,並將代碼藏於伺服器的資料庫內部,使得一些技術得到的保密,這也是預存程序的一大特色,希望讀者能從中得到啟益。 |
轉自: http://goaler.xicp.net/ShowLog.asp?ID=504