最近有很多的朋友問到呼叫儲存過程的問題,這裡簡單介紹幾種asp呼叫帶引數儲存過程的方法。
1 這也是最簡單的方法,兩個輸入引數,無返回值:
set connection = server.createobject("adodb.connection")
connection.open somedsn
connection.execute "procname varvalue1, varvalue2"
''將所有物件清為nothing,釋放資源
connection.close
set connection = nothing
2 如果要返回 recordset 集:
set connection = server.createobject("adodb.connection")
connection.open somedsn
set rs = server.createobject("adodb.recordset")
rs.open "exec procname varvalue1, varvalue2",connection
''將所有物件清為nothing,釋放資源
rs.close
connection.close
set rs = nothing
set connection = nothing
3 以上兩種方法都不能有返回值,(recordset除外),如果要得到返回值,需要用command的方法。
首先說明,返回值有兩種。一種是在儲存過程中直接return乙個值,就象c和vb的函式返回值那樣;另一種是可以返回多個值,存
儲這些值的變數名稱需要在呼叫引數中先行指定。
這個例子要處理多種引數,輸入引數,輸出引數,返回記錄集以及乙個直接返回值(夠全了吧?)
儲存過程如下:
use pubs
go-- 建立儲存過程
create procedure sp_pubstest
-- 定義三個引數變數,注意第三個,特別標記是用於輸出
@au_lname varchar (20),
@intid int,
@intidout int output
asselect @intidout = @intid + 1
select *
from authors
where au_lname like @au_lname + ''%''
--直接返回乙個值
return @intid + 2
呼叫該儲存過程的asp程式如下:
<%@ language=vbscript %>
<%
dim cmdsp
dim adors
dim adcmdspstoredproc
dim adparamreturnvalue
dim adparaminput
dim adparamoutput
dim adinteger
dim ival
dim oval
dim adofield
dim advarchar
『這些值在 vb 中是預定義常量,可以直接呼叫,但在 vbscript 中沒有預定義
adcmdspstoredproc = 4
adparamreturnvalue = 4
adparaminput = 1
adparamoutput = 2
adinteger = 3
advarchar = 200
ival = 5
oval = 3
''建乙個command物件
set cmdsp = server.createobject("adodb.command")
''建立鏈結
cmdsp.activeconnection = "driver=;server=(local);uid=sa;pwd=;database=pubs"
''定義command 物件呼叫名稱
cmdsp.commandtext = "sp_pubstest"
''設定command呼叫型別是儲存過程 (adcmdspstoredproc = 4)
cmdsp.commandtype = adcmdspstoredproc
''執行儲存過程,並得到返回記錄集
set adors = cmdsp.execute
''把每個記錄列印出來,其中的字段是虛擬的,可以不用管
while not adors.eof
for each adofield in adors.fields
response.write adofield.name & "=" & adofield.value & "
" & vbcrlf
next
response.write "
"adors.movenext
wend
''列印兩個輸出值:
response.write "@intidout = 「 & cmdsp.parameters("@intidout").value & "
"response.write "return value = " & cmdsp.parameters("return_value").value & "
"''大掃除
set adors = nothing
set cmdsp.activeconnection = nothing
set cmdsp = nothing
%>
在asp中使用儲存過程
為了提高asp程式的效率,有時需要在asp中使用使用sql server的儲存技術,下面簡單作乙個介紹。
儲存過程的建立
這裡只簡單介紹如何在sql server的企業管理器中如何建立儲存過程:
(1)開啟企業管理器enterprise manager
(2)選擇伺服器組(sql server group)、伺服器、資料庫(database)以及相就的資料庫,滑鼠右擊對應資料庫下的stored procdures項,在彈出的選單中選擇new stored procedure,在stored procedures properties中輸入建立儲存過程的語句。下面是乙個例子:
create procedure proctest @mycola char(10),@mycolb char(10),@mycolc text as
insert into chatdata (mycola,mycolb,mycolc) values(@mycola,@mycolb,@mycolc)
在sql server的文件中它的語法為:
create proc[edure] procedure_name [;number] [
[varying] [= default] [output] ]
[,...n] [with ] [for replication] as
sql_statement [...n]
如果你對sql語法不熟悉,可以使用check syntax來檢查語法。在上例中,表示建立儲存過程名為mycola,帶3個引數的儲存過過程,其中第乙個引數mycola資料型別為char,寬度10;第2個引數資料型別為char,寬度為10,第3個引數資料型別為text,在這裡使用的是sql server的資料型別。
參許引數值的型別的意義如下:
名稱值 整數值 功能
addbtimestamp 135 日期時間資料型別
addecimal 14 十進位制整數值
addouble 5 雙精度小數值
aderror 10 系統錯誤資訊
adguid 72 全域性唯一識別字(globally unique identifier)
addispath 9 com/ole自動物件(automation object)
adinteger 3 4位元組有符號整數
adiunknown 13 com/ole物件
adlongvarbinary 205 大型2位元組值
adlongvarchar 201 大型字串值
adlongvarwchar 203 大型未編碼字串
adnumeric 131 十進位制整數值
adsingle 4 單精度浮點小數
ad**allint 2 2位元組有符號整數
adtinyint 16 1位元組有符號整數
adunsignedbigint 21 8位元組無符號整數
adunsignedint 19 4位元組無符號整數
adunsigned**allint 18 2位元組無符號整數
adunsignedtinyint 17 1位元組無符號整數
aduserdefined 132 使用者自定義資料型別
advariant 12 ole物件
advarbinary 204 雙位元組字元變數值
advarchar 200 字元變數值
advarchar 202 未編碼字串變數值
adwchar 130 未編碼字串
方向值的意義如下:
名稱值 整數值 功能
adparaminput 1 允許資料輸入至該引數當中
adparamoutput 2 允許資料輸出至該引數當中
adparaminputoutput 3 允許資料輸入、輸出至該引數當中
adparamreturnvalue 4 允許從一子程式中返回資料至該引數當中
ASP呼叫帶引數儲存過程的幾種方式
asp呼叫帶引數儲存過程的幾種方式 最近有很多的朋友問到呼叫儲存過程的問題,這裡簡單介紹幾種asp呼叫帶引數儲存過程的方法。1 這也是最簡單的方法,兩個輸入引數,無返回值 set connection server.createobject adodb.connection connection.o...
儲存過程如何呼叫帶引數的儲存過程
declare value varchar max exec tmfun getsearchstr 陝西 table1 name value output select from users where address value 顯示結果為 解釋 其中,tmfun getsearchstr 為儲存...
asp呼叫儲存過程
1.呼叫儲存過程的一般方法 先假設在sql server中有一儲存過程dt users create procedure dbo dt users as select from users return go 第一種方法是不利用command物件,直接用recordset物件 set rs serv...