top
Loading...
用存儲過程實現ASP對數據庫訪問

一、ADO概述
ActiveX 數據對象 (ADO) 是一種既易于使用又可擴充的技術,用來將數據庫訪問添加到您的 Web 頁可以使用 ADO 編寫簡潔和可升級的腳本以連接到與 OLE DB 兼容的數據源,如數據庫、電子表格、順序數據文件或電子郵件目錄。OLE DB 是一個系統級的編程接口,它提供一套標準的 COM 接口,用來展示數據庫管理系統的功能。使用 ADO 的對象模型,您可以輕松地(使用 VBScript 或 JScript 等腳本語言)訪問這些接口并將數據庫功能添加到您的 Web 應用程序中。另外,您還可以使用 ADO 訪問與開放式數據庫互連 (ODBC) 兼容的數據庫。
如果您是一位對數據庫互連知識有一定了解的腳本編寫者,您將會發現 ADO 的命令語法很簡單,而且很容易使用。如果您是一位經驗豐富的開發人員,您將會非常欣賞 ADO 提供的這種可升級的對各種數據源的高性能訪問。
二、訪問數據庫的一般方法
一般的網頁訪問中訪問數據庫是按照下列步驟進行的,首先建立一個ADODB.Connection 接口的對象,接著在這一個對象上綁定相應的數據源(可以用有名數據源和無名數據源),根據需要建立或者不建立記錄集,然后在該數據源上鏈接用執行或打開的方法來對相應的表進行操作。
Asp訪問數據庫的一般方法:
<
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")
oConn.open strConn
set ORS=oConn.execute(“select * from test”)
>
以上介紹了無名鏈接的OLEDB的使用方法,如果是有名鏈接,設為數據源test,用戶名和口令均為空,則只需要改寫一下上述語句oConn.open “test”,””,””
上面簡要介紹了一下對于網頁中涉及到數據庫訪問的一般方法,這些已經是很成熟的,也是很有用的,如果在實際中對于某些數據的存取過于復雜,需要近10條SQL語句才能寫完,那么這種方法就有點欠缺,另外有些時候需要使用相同的處理過程,而在不同的網頁中使用,而這用存儲過程則是最有利的,還有一個最大特點是存儲過程對于技術的保密性相對高些,它存儲于遠端服務器的數據庫內。
三、存儲過程在ASP中的使用
在ADO中提供了對存儲過程的訪問,它需要用到command對象,在這個對象上用戶可以直接執行SQL服務器的存儲過程,而命令中所需要的參數可以借助于其屬性Pamaters來進行處理。
注意 一個 Command 對象要想有效,必須和一個 Connection 對象相關聯,方法是Command 對象的 ActiveConnection 屬性就被設置到這個 Connection 對象。如果一個 Connection 對象不能被標識,在您將它與一個連接關聯之前,Command 對象是無效的。
< Dim oConn  
Dim strConn  
Dim oCmd  
Dim oRs,ors1  
dim aa
dim sql
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"
oConn.Open strConn
‘將建立的鏈接添加到命令的活動鏈接屬性中
Set oCmd.ActiveConnection = oConn
' 設置調用存儲過程byroyalty和參數,參數由?引入
oCmd.CommandText = "{call byroyalty(?)}"
oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput)
' 提供輸入的參數
oCmd("@Percentage") = 75
‘在asp中上述輸入參數的使用也可不用參數屬性來實現直接用VB中的&來形成命令文本中對應的數據即可
‘參數的使用在輸出時是特別有用的
Set oRs = oCmd.Execute  
ors1.activeconnection=oconn  
‘該命令對象中也可應用一般的SQL語句使用Source和open屬性,其中source指出數據源
ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1"
ors1.cursortype=adopenstatic  
ors1.open
>
四、在SQL中的存儲過程簡介
利用SQL的語言可以編寫對于數據庫訪問的存儲過程,其語法如下:
CREATE PROC[EDURE] procedure_name [;number]
[
{@parameter data_type} ][VARYING] [= default] [OUTPUT]
]
[,...n]
[WITH  
{
RECOMPILE  
| ENCRYPTION  
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
sql_statement [...n]
[ ]內的內容是可選項,而()內的內容是必選項,
例: 若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為:
Create Proc select_del As  
Delete tmp  
例:用戶想查詢tmp表中某年的數據的存儲過程
create proc select_query @year int as
select * from tmp where year=@year
在這里@year是存儲過程的參數
例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由存儲過程來擔當,在網頁中重復使用達到共享。
空:表示該結點為頂層結點
fjdid(父結點編號)  
結點n 非空:表示該結點的父親結點號
dwmc(單位名稱)
CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output
as  
declare @stop int
declare @result varchar(80)
declare @dwmc varchar(80)
declare @dwid int
set nocount on
set @stop=1
set @dwmc=""
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold  
set @result=rtrim(@dwmc)
if @dwid=0  
set @stop=0
while (@stop=1) and (@dwid<>0)
begin
set @dwidold=@dwid
select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold
if @@rowcount=0  
set @dwmc=""
else
set @result=@dwmc+@result
if (@dwid=0) or (@@rowcount=0)  
set @stop=0
else
continue
end
set @dwmcresult=rtrim(@result)
充分合理地利用存儲過程,可以提高服務器吞吐能力,筆者利用存儲過程來從近20個表中獲取數據組合成一個通用的表,產生近2萬條記錄,而所需時間約7秒鐘,如果這種操作借助于較合理的動態網頁可以將服務器開發提高到一個高度,充分利用存儲過程,可以減輕網頁設計帶來的繁重處理,而使所編寫的代碼得到共享和合理的利用,并將代碼藏于服務器的數據庫內部,使得一些技術得到的保密,這也是存儲過程的一大特色,希望讀者能從中得到啟益。

北斗有巢氏 有巢氏北斗