说明:1、使用存储过程比asp直接使用SQL语句速度快得多! 2、asp调用SQL Server存储过程时,经常用到一些参数,如果你没有定义或加载adovbs.inc文件,就会出错,所以你可以直接定义,或试用该参数的替代数字!详见存储过程初级篇:SQL Server存储过程的建立和使用 1.数据库链接文件:include.asp使用方式:<!--#include file="include/conn.asp"--> '//假设数据库文件放在include目录下<%dim conndim connstron 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 IfEnd Sub Sub CloseConn() '//断开数据库链接 conn.close set conn=nothingEnd 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 objCnndim objCmddim Rsconst 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=objCnnobjCmd.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 pubsGO -- 建立存储过程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,rsDim 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.MoveNextWend '//打印两个输出值:Response.Write "<p>@intIDOut = " & cmdSP.Parameters("@intIDOut").Value & "</p>"Response.Write "<p>Return value = " & cmdSP.Parameters("RETURN_VALUE").Value & "</p>" '//释放资源Set rs = nothingSet conn = nothingSet cmdSP = nothing%> 4.下面再举一个典型的例子: <%@ Language=VBScript %><% '---开始链接数据库Dim strConnStringstrConnString = "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 , SelectReturnSelectSql = "Select Max(CompanyID) From Dim_Company"Set SelectRs = Conn.Execute(SelectSql)SelectID = SelectRs(0)'---结束为输入参数赋值 Dim TiggerTypeTiggerType = 3 Set Cmd = Server.CreateObject("ADODB.Command") Set Cmd.ActiveConnection = ConnCmd.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.CloseSet Conn = NothingSet Cmd = NothingSet CmdParamID = NothingSet CmdParamname = NothingSet CmdParamReturn = Nothing %>

评论