正文

asp调用SQL Server存储过程2007-03-02 13:19:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wangsdong/23583.html

分享到:

说明:
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

%>

阅读(5315) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册