说明:
1、使用存储过程比asp直接使用SQL语句速度快得多!
2、asp调用SQL Server存储过程时,经常用到一些参数,如果你没有定义或加载adovbs.inc文件,就会出错,所以你可以直接定义,或试用该参数的替代数字!详见存储过程初级篇:SQL Server存储过程的建立和使用
1.数据库链接
文件:include.asp
使用方式:<!--#include file="include/conn.asp"--> '//假设数据库文件放在include目录下
<%
dim conn
dim connstr
on error resume next
Sub OpenConn() '//建立数据库链接
connstr="DRIVER={SQL Server};Server=127.0.0.1;UID=badboy;PWD=badyboyILoveYou;database=BadBoyDB"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "数据库连接出错,请检查连接字串。"
Response.End
End If
End Sub
Sub CloseConn() '//断开数据库链接
conn.close
set conn=nothing
End Sub
%>
2.调用数据库存储过程
<% Call OpenConn() '//建立连接对象
'// 1)ADO标准方法,缺点:当存储过程中有两个以上的SELECT语句,但从逻辑上又不可能同时执行的时候,ADO会提示你存储过程中SELECT语句太多
Set cmdSP = Server.CreateObject("ADODB.Command") '//建立命令对象
cmdSP.CommandText = "sp_badboy" '//存储过程名称
cmdSP.CommandType = 4 '//命令类别为4,表示为存储过程;如果是cmdTemp.CommandType = adCmdStoredProc 表示页面包含了adovbs.inc 文件。
Set cmdSP.ActiveConnection = conn
'Set tmpParam = cmdSP.CreateParameter("Return Value", 3, 4, 4) '//创建输入参数对象
'cmdSP.Parameters.Append tmpParam
'Set tmpParam = cmdSP.CreateParameter("@BeginDate", 135, 1, 16, SubTime) '//创建输入参数对象
'cmdSP.Parameters.Append tmpParam
'//下面两步可用这个语句代替:set rs=cmdTemp.Execute
Set rs =Server.CreateObject("ADODB.Recordset") '//建立记录集对象,ADO包含7个内置对象:Connection、Command、RecordSet、Fields、Error、Parameters和Properties。
rs.Open cmdSP, ,1,3 '//生成查询结果
'// 2)直接用ADO的CONNECTION对象的EXECUTE方法直接执行存储过程
set rs=conn.execute("Execute sp_badboy"&"'&SubTime&'")
set rs=conn.execute ("Execute sp_badboy1 "&page&", "&pagesizeConst)
conn.execute "sp_badboy" '//没有任何返回值
Call CloseConn() '//断开连接对象
%>
下面的比较典型:
<!-- 必须加载adovbs.inc文件,否则将出错 -->
<!--#include file="adovbs.inc"-->
<%
dim objCnn
dim objCmd
dim Rs
const o_id=112
'-----建立Connection对象----------
set objCnn=Server.CreateObject("Adodb.connection")
objCnn.Open "driver={sql server};server=127.0.0.1;uid=sa;pwd=cncanet;database=check;"
'-----建立Command对象-----------
set objCmd=Server.CreateObject("Adodb.Command")
objCmd.ActiveConnection=objCnn
objCmd.CommandText="order_tot_amt" '指定存储过程名称
objCmd.CommandType=adCmdStoredProc '其为Stored Procedure
'-----准备stored procedure 的参数-------
objCmd.Parameters.Append objCmd.CreateParameter("o_id",adInteger,adParamInput,,o_id)
objCmd.Parameters.Append objCmd.CreateParameter("p_tot",adBigInt,adParamOutput,,0)
'-----执行存储过程----------------------
objCmd.Execute
'-----输出参数以及处理结果--------------
for each parm in objCmd.Parameters
Response.Write parm.name &"="& trim(parm) &"<br>"
next
%>
3.ASP调用带参数存储过程的几种方式(简单实用)
1) 这也是最简单的方法,两个输入参数,无返回值,用于INSERT,UPDATE,DELETE操作较多。
conn.Execute "procname varvalue1,varvalue2"
2) 如果要返回 Recordset 集:
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",conn
3) 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。
下面这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)
存储过程如下:
use pubs
GO
-- 建立存储过程
create procedure sp_PubsTest
-- 定义三个参数变量,注意第三个,特别标记是用于输出
@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
调用方式如下
<%@ Language=VBScript CodePage="936"%>
<%
Dim cmdSP,rs
Dim iVal,oVal
Dim adoField
iVal = 5 '//输入值为5??
oVal = 3 '//输出值为3??
set cmdSP = Server.CreateObject("ADODB.Command") '//建一个command对象
cmdSP.ActiveConnection = conn '//建立连结
cmdSP.CommandText = "sp_PubsTest" '//定义command 对象调用名称
cmdSP.CommandType = 4 '//设置command调用类型是存储过程 (adCmdSPStoredProc = 4)
'//往command 对象中加参数
cmdSP.Parameters.Append cmdSP.CreateParameter("RETURN_VALUE",3, 4, 4) '//有4个参数,定义存储过程有直接返回值,并且是个整数缺省值是4;adParamReturnValue(第三个参数)=4,
代表返回值
cmdSP.Parameters.Append cmdSP.CreateParameter("@au_lname", 200, 1, 20, "M") '//有5个参数,定义一个字符型输入参数;adParamInput(第三个参数)=1
cmdSP.Parameters.Append cmdSP.CreateParameter("@intID", 3,1, , iVal) '//有5个参数,定义一个整型输入参数;adParamInput(第三个参数)=1
cmdSP.Parameters.Append cmdSP.CreateParameter("@intIDOut",3,2, oVal) '//有4个参数,定义一个整型输出参数;adParamOutput(第三个参数)=2
Set rs = cmdSP.Execute '//运行存储过程,并得到返回记录集
'//把每个记录打印出来,其中的字段是虚拟的,可以不用管
While not rs.EOF
For each adoField in rs.Fields
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Next
Response.Write "<br>"
rs.MoveNext
Wend
'//打印两个输出值:
Response.Write "<p>@intIDOut = " & cmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Return value = " & cmdSP.Parameters("RETURN_VALUE").Value & "</p>"
'//释放资源
Set rs = nothing
Set conn = nothing
Set cmdSP = nothing
%>
4.下面再举一个典型的例子:
<%@ Language=VBScript %>
<%
'---开始链接数据库
Dim strConnString
strConnString = "driver={SQL Server};server=songhp;uid=sa;pwd=;database=XVZDemo"
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConnstring
'---结束链接数据库
'---开始为输入参数赋值
Dim SelectSql , SelectRs
Dim SelectID , SelectName , SelectReturn
SelectSql = "Select Max(CompanyID) From Dim_Company"
Set SelectRs = Conn.Execute(SelectSql)
SelectID = SelectRs(0)
'---结束为输入参数赋值
Dim TiggerType
TiggerType = 3
Set Cmd = Server.CreateObject("ADODB.Command")
Set Cmd.ActiveConnection = Conn
Cmd.CommandType = 4 '---声明此过程为存储过程
If TiggerType = 1 then
'---开始一个输入参数的存储过程调用
Cmd.CommandText = "TransCompany1"
Set CmdParam = Cmd.CreateParameter("@TransID",3,1)
Cmd.Parameters.Append CmdParam
Cmd("@TransID") = SelectID
Cmd.Execute
'---结束一个输入参数的存储过程调用
Elseif TiggerType = 2 then
'---开始一个输入参数,一个输出参数的存储过程调用
Cmd.CommandText = "TransCompany2"
Set CmdParamID = Cmd.CreateParameter("@TransID",3,1)
Cmd.Parameters.Append CmdParamID
Cmd("@TransID") = SelectID
Set CmdParamName = Cmd.CreateParameter("@TransName",202,2,50)
Cmd.Parameters.Append CmdParamName
Cmd.Execute
SelectName = Cmd("@TransName")
'---结束一个输入参数,一个输出参数的存储过程调用
Elseif TiggerType = 3 then
'---开始一个输入参数,一个输出参数,一个返回值的存储过程调用
Cmd.CommandText = "TransCompany3"
Set CmdParamReturn = Cmd.CreateParameter("Return_Value",3,4)
Cmd.Parameters.Append CmdParamReturn
Set CmdParamID = Cmd.CreateParameter("@TransID",3,1)
Cmd.Parameters.Append CmdParamID
Cmd("@TransID") = SelectID
Set CmdParamName = Cmd.CreateParameter("@TransName",202,2,50)
Cmd.Parameters.Append CmdParamName
Cmd.Execute
SelectName = Cmd("@TransName")
SelectReturn = Cmd("Return_Value")
'---结束一个输入参数,一个输出参数,一个返回值的存储过程调用
End if
Conn.Close
Set Conn = Nothing
Set Cmd = Nothing
Set CmdParamID = Nothing
Set CmdParamname = Nothing
Set CmdParamReturn = Nothing
%>
评论