用存儲過程完成ASP對數(shù)據(jù)庫訪問
發(fā)表時間:2024-06-04 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、ADO概述ActiveX 數(shù)據(jù)對象 (ADO) 是一種既易于使用又可擴充的技術(shù),用來將數(shù)據(jù)庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數(shù)據(jù)源,如數(shù)據(jù)庫、電子表格、順序數(shù)據(jù)文件或電子郵件目錄。OLE DB 是一個系統(tǒng)級的編程接口,它提供一套...
ActiveX 數(shù)據(jù)對象 (ADO) 是一種既易于使用又可擴充的技術(shù),用來將數(shù)據(jù)庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數(shù)據(jù)源,如數(shù)據(jù)庫、電子表格、順序數(shù)據(jù)文件或電子郵件目錄。OLE DB 是一個系統(tǒng)級的編程接口,它提供一套標準的 COM 接口,用來展示數(shù)據(jù)庫管理系統(tǒng)的功能。使用 ADO 的對象模型,您可以輕松地(使用 VBScript 或 JScript 等腳本語言)訪問這些接口并將數(shù)據(jù)庫功能添加到您的 Web 應用程序中。另外,您還可以使用 ADO 訪問與開放式數(shù)據(jù)庫互連 (ODBC) 兼容的數(shù)據(jù)庫。 |
如果您是一位對數(shù)據(jù)庫互連知識有一定了解的腳本編寫者,您將會發(fā)現(xiàn) ADO 的命令語法很簡單,而且很容易使用。如果您是一位經(jīng)驗豐富的開發(fā)人員,您將會非常欣賞 ADO 提供的這種可升級的對各種數(shù)據(jù)源的高性能訪問。 |
一般的網(wǎng)頁訪問中訪問數(shù)據(jù)庫是按照下列步驟進行的,首先建立一個ADODB.Connection 接口的對象,接著在這一個對象上綁定相應的數(shù)據(jù)源(可以用有名數(shù)據(jù)源和無名數(shù)據(jù)源),根據(jù)需要建立或者不建立記錄集,然后在該數(shù)據(jù)源上鏈接用執(zhí)行或打開的方法來對相應的表進行操作。 |
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的使用方法,如果是有名鏈接,設為數(shù)據(jù)源test,用戶名和口令均為空,則只需要改寫一下上述語句oConn.open “test”,””,”” |
上面簡要介紹了一下對于網(wǎng)頁中涉及到數(shù)據(jù)庫訪問的一般方法,這些已經(jīng)是很成熟的,也是很有用的,如果在實際中對于某些數(shù)據(jù)的存取過于復雜,需要近10條SQL語句才能寫完,那么這種方法就有點欠缺,另外有些時候需要使用相同的處理過程,而在不同的網(wǎng)頁中使用,而這用存儲過程則是最有利的,還有一個最大特點是存儲過程對于技術(shù)的保密性相對高些,它存儲于遠端服務器的數(shù)據(jù)庫內(nèi)。 |
在ADO中提供了對存儲過程的訪問,它需要用到command對象,在這個對象上用戶可以直接執(zhí)行SQL服務器的存儲過程,而命令中所需要的參數(shù)可以借助于其屬性Pamaters來進行處理。 |
注意 一個 Command 對象要想有效,必須和一個 Connection 對象相關(guān)聯(lián),方法是Command 對象的 ActiveConnection 屬性就被設置到這個 Connection 對象。如果一個 Connection 對象不能被標識,在您將它與一個連接關(guān)聯(lián)之前,Command 對象是無效的。 |
Set oConn = Server.CreateObject("ADODB.Connection") |
set oCmd = Server.CreateObject("ADODB.Command") |
set ors1=Server.CreateObject("ADODB.RecordSet") |
' 打開鏈接,使用用戶標識SA,口令為空,連接為本地服務器上的數(shù)據(jù)庫 |
strConn="Provider=SQLOLEDB;User ID=sa;Initial Catalog=pubs;Data Source="& Request.ServerVariables("SERVER_NAME") |
'如果連接一個遠端的數(shù)據(jù)庫,該數(shù)據(jù)庫地址為: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 |
' 設置調(diào)用存儲過程byroyalty和參數(shù),參數(shù)由?引入 |
oCmd.CommandText = "{call byroyalty(?)}" |
oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput) |
‘在asp中上述輸入?yún)?shù)的使用也可不用參數(shù)屬性來實現(xiàn)直接用VB中的&來形成命令文本中對應的數(shù)據(jù)即可 |
ors1.activeconnection=oconn |
‘該命令對象中也可應用一般的SQL語句使用Source和open屬性,其中source指出數(shù)據(jù)源 |
ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1" |
ors1.cursortype=adopenstatic |
利用SQL的語言可以編寫對于數(shù)據(jù)庫訪問的存儲過程,其語法如下: |
CREATE PROC[EDURE] procedure_name [;number] |
{@parameter data_type} [VARYING] [= default] [OUTPUT] |
[ ]內(nèi)的內(nèi)容是可選項,而()內(nèi)的內(nèi)容是必選項, |
例: 若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為: |
Create Proc select_del As |
例:用戶想查詢tmp表中某年的數(shù)據(jù)的存儲過程 |
create proc select_query @year int as |
select * from tmp where year=@year |
例:該存儲過程是從某結(jié)點n開始找到最上層的父親結(jié)點,這種經(jīng)常用到的過程可以由存儲過程來擔當,在網(wǎng)頁中重復使用達到共享。 |
結(jié)點n 非空:表示該結(jié)點的父親結(jié)點號 |
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個表中獲取數(shù)據(jù)組合成一個通用的表,產(chǎn)生近2萬條記錄,而所需時間約7秒鐘,如果這種操作借助于較合理的動態(tài)網(wǎng)頁可以將服務器開發(fā)提高到一個高度,充分利用存儲過程,可以減輕網(wǎng)頁設計帶來的繁重處理,而使所編寫的代碼得到共享和合理的利用,并將代碼藏于服務器的數(shù)據(jù)庫內(nèi)部,使得一些技術(shù)得到的保密,這也是存儲過程的一大特色,希望讀者能從中得到啟益。 |