1,調用沒有參數(shù)的存儲過程
<%
set conn=server.createobject("adodb.connection")
set cmd=server.createobject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.open strconn
set cmd.activeconnection=conn
cmd.commandtext="{call nono}"
'set rs=cmc.exe 或者cmd.execute
set rs=cmd.execute()
%>
2,一個輸入的參數(shù)的存儲過程
<%
set conn=server.createobject("adodb.connection")
set cmd=server.createobject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.open strconn
set cmd.activeconnection=conn
cmd.commandtext="{call oneinput(?)}"
cmd.parameters.append cmd.createparameter("@aaa",adinteger ,adparaminput )
cmd("@aaa")=100
cmd.execute()
%>
3,一個輸入?yún)?shù)和一個輸出的參數(shù)
<%
set conn=server.createobject("adodb.connection")
set cmd=server.createobject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.open strconn
set cmd.activeconnection=conn
cmd.commandtext = "{call oneinout(?,?)}"
cmd.parameters.append cmd.createparameter("@aaa",adinteger,adparaminput)
cmd("@aaa")=10
cmd.parameters.append cmd.createparameter("@bbb",adinteger,adparamoutput)
cmd.execute()
bbb=cmd("@bbb")
%>
4,一個輸入?yún)?shù),一個輸出參數(shù),和一個返回值
<%
set conn=server.createobject("adodb.connection")
set cmd=server.createobject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.open strconn
set cmd.activeconnection=conn
cmd.commandtext="{?=call onereturn(?,?)}"
cmd.parameters.append cmd.createparameter("@return_value",adinteger,adparamreturnvalue )
cmd.parameters.append cmd.createparameter("@aaa",adinteger,adparaminput )
cmd("@aaa")=10
cmd.parameters.append cmd.createparameter("@bbb",adinteger,adparamoutput)
cmd.execute()
bbb=cmd("@bbb")
rrr=cmd("@return_value")
%>
如何在asp中調用sql存儲過程
<%set connection1 = server.createobject("adodb.connection")
connection1.open ... '聯(lián)接
set command1=server.createobject("adodb.command")
set command1.activeconnection=connection1
command1.commandtype=4
command1.commandtext="sp_1" 'sp 名
command1.parameters(1)=... '參數(shù)值
command1.parameters(2)=...
set recordset1=command1.execute()
%>
asp調用存儲過程的技巧
1、最簡單的如下
dim objconn
set objconn = server.createobject("adobd.connection")
objconn.open application("connection_string")
'call the stored procedure to increment a counter on the page
objconn.execute "exec sp_addhit"
沒有參數(shù),沒有返回,沒有錯誤處理,就是這個了
2、帶參數(shù)的一種調用
objconn.execute "exec sp_addhit 'http://aspalliance.com', 1"
請注意分割參數(shù),該方法也不返回記錄
3、返回記錄的
dim objconn
dim objrs
set objconn = server.createobject("adobd.connection")
set objrs = server.createobject("adobd.recordset")
objconn.open application("connection_string")
'call the stored procedure to increment a counter on the page
objrs.open objconn, "exec sp_listarticles '1/15/2001'"
'loop through recordset and display each article
4、……
dim objconn
dim objcmd
'instantiate objects
set objconn = server.createobject("adodb.connection")
set objcmd = server.createobject("adodb.command")
conn.open application("connectionstring")
with objcmd
.activeconnection = conn 'you can also just specify a connection string here
.commandtext = "sp_insertarticle"
.commandtype = adcmdstoredproc 'requires the adovbs.inc file or typelib meta tag
'add input parameters
.parameters.append .createparameter("@columnist_id", addouble, adparaminput, , columnist_id)
.parameters.append .createparameter("@url", advarchar, adparaminput, 255, url)
.parameters.append .createparameter("@title", advarchar, adparaminput, 99, url)
.parameters.append .createparameter("@description", adlongvarchar, _
adparaminput, 2147483647, description)
'add output parameters
.parameters.append .createparameter("@link_id", adinteger, adparamoutput, , 0)
'execute the function
'if not returning a recordset, use the adexecutenorecords parameter option
.execute, , adexecutenorecords
link_id = .parameters("@link_id")
end with
5、存儲過程的代碼
create procedure dbo.sp_insertarticle
(
@columnist_id int,
@url varchar(255),
@title varchar(99),
@description text
@link_id int output
)
as
begin
insert into dbo.t_link (columnist_id,url,title,description)
values (@columnist_id,@url,@title,@description)
select @link_id = @@identity
end
asp調用帶參數(shù)存儲過程的幾種方式
最近有很多的朋友問到調用存儲過程的問題,這里簡單介紹幾種asp調用帶參數(shù)存儲過程的方法。
1 這也是最簡單的方法,兩個輸入?yún)?shù),無返回值:
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的函數(shù)返回值那樣;另一種是可以返回多個值,存
儲這些值的變量名稱需要在調用參數(shù)中先行指定。
這個例子要處理多種參數(shù),輸入?yún)?shù),輸出參數(shù),返回記錄集以及一個直接返回值(夠全了吧?)
存儲過程如下:
use pubs
go
-- 建立存儲過程
create procedure sp_pubstest
-- 定義三個參數(shù)變量,注意第三個,特別標記是用于輸出
@au_lname varchar (20),
@intid int,
@intidout int output
as
select @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={sql server};server=(local);uid=sa;pwd=;database=pubs"
''定義command 對象調用名稱
cmdsp.commandtext = "sp_pubstest"
''設置command調用類型是存儲過程 (adcmdspstoredproc = 4)
cmdsp.commandtype = adcmdspstoredproc
''往command 對象中加參數(shù)
''定義存儲過程有直接返回值,并且是個整數(shù),省缺值是4
cmdsp.parameters.append cmdsp.createparameter("return_value", adinteger, adparamreturnvalue, 4)
''定義一個字符型輸入?yún)?shù)
cmdsp.parameters.append cmdsp.createparameter("@au_lname", advarchar, adparaminput, 20, "m")
''定義一個整型輸入?yún)?shù)
cmdsp.parameters.append cmdsp.createparameter("@intid", adinteger, adparaminput, , ival)
''定義一個整型輸出參數(shù)
cmdsp.parameters.append cmdsp.createparameter("@intidout", adinteger, adparamoutput, oval)
''運行存儲過程,并得到返回記錄集
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的企業(yè)管理器中如何建立存儲過程:
(1)打開企業(yè)管理器enterprise manager
(2)選擇服務器組(sql server group)、服務器、數(shù)據(jù)庫(database)以及相就的數(shù)據(jù)庫,鼠標右擊對應數(shù)據(jù)庫下的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] [
[u]{@parameter[/u] data_type} [varying] [= default] [output] ]
[,...n] [with { recompile | encryption
| recompile, encryption } ] [for replication] as
sql_statement [...n]
如果你對sql語法不熟悉,可以使用check syntax來檢查語法。在上例中,表示建立存儲過程名為mycola,帶3個參數(shù)的存儲過過程,其中第一個參數(shù)mycola數(shù)據(jù)類型為char,寬度10;第2個參數(shù)數(shù)據(jù)類型為char,寬度為10,第3個參數(shù)數(shù)據(jù)類型為text,在這里使用的是sql server的數(shù)據(jù)類型。
存儲過程建立后,下面就是如何在asp程序中調用該存儲過程:在asp中調用存儲過程 為了提高asp程序的效率,有時需要在asp中使用使用sql server的存儲技術,下面簡單作一個,在上面的增加參數(shù)的語句p.append cm.createparameter("@mycolc",201,1,250)中,格式為:
p.append cm.createparameter("參數(shù)名稱",類型,方向,大小)
參許參數(shù)值的類型的意義如下:
名稱值 整數(shù)值 功能
addbtimestamp 135 日期時間數(shù)據(jù)類型
addecimal 14 十進制整數(shù)值
addouble 5 雙精度小數(shù)值
aderror 10 系統(tǒng)錯誤信息
adguid 72 全域性唯一識別字(globally unique identifier)
addispath 9 com/ole自動對象(automation object)
adinteger 3 4字節(jié)有符號整數(shù)
adiunknown 13 com/ole對象
adlongvarbinary 205 大型2字節(jié)值
adlongvarchar 201 大型字符串值
adlongvarwchar 203 大型未編碼字符串
adnumeric 131 十進制整數(shù)值
adsingle 4 單精度浮點小數(shù)
adsmallint 2 2字節(jié)有符號整數(shù)
adtinyint 16 1字節(jié)有符號整數(shù)
adunsignedbigint 21 8字節(jié)無符號整數(shù)
adunsignedint 19 4字節(jié)無符號整數(shù)
adunsignedsmallint 18 2字節(jié)無符號整數(shù)
adunsignedtinyint 17 1字節(jié)無符號整數(shù)
aduserdefined 132 用戶自定義數(shù)據(jù)類型
advariant 12 ole對象
advarbinary 204 雙字節(jié)字符變量值
advarchar 200 字符變量值
advarchar 202 未編碼字符串變量值
adwchar 130 未編碼字符串
方向值的意義如下:
名稱值 整數(shù)值 功能
adparaminput 1 允許數(shù)據(jù)輸入至該參數(shù)當中
adparamoutput 2 允許數(shù)據(jù)輸出至該參數(shù)當中
adparaminputoutput 3 允許數(shù)據(jù)輸入、輸出至該參數(shù)當中
adparamreturnvalue 4 允許從一子程序中返回數(shù)據(jù)至該參數(shù)當中
更多詳細資源請參考sql server的文檔和iis的文檔資源。
該文章在 2010/7/3 14:25:34 編輯過