如何在Asp中调存储过程?(100分)

  • 主题发起人 主题发起人 raider
  • 开始时间 开始时间
R

raider

Unregistered / Unconfirmed
GUEST, unregistred user!
老问题了,我这上来特别慢,无法检索,各位帮忙一下吧!
CREATE PROCEDURE Test @Num int, @Name char(10) , @Count OutPut as
有两个输入的参数Num, Name,一个输出参数Count, 怎样
用Asp调存储过程,获取Count的值, 以及存储过程的Return的值呢?
能不能简单贴一点代码
 
顺便问一下,如果我在asp中用Conn.Execute "Update ...."
如果出错,怎样知道?我用on Error Goto ErrorHandle 他老说
语法错误,但用On error resume next 却可以,为何?
 
On error resume next 发生错误后跳到下一句执行,肯定可以
On error goto ErrorHandle 就不知道了
我刚开始学ASP,晚了
存储过程如下:
CREATE PROCEDURE reptq3 @lolimit money,@hilimit money,@type char(12)
AS
select pub_id,type,title_id,price
from titles
where price>@lolimit and price<@hilimit and type=@type or type like
'%cook%' order by pub_id,type
COMPUTE count(title_id) BY pub_id,type
ASP:
Set cmd=Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection=conn
cmd.CommandText="reptq3"
RdDim p(2)
p(0)=CCur(lolimit)
p(1)=CCur(hilimit)
p(2)=CStr(vType)
Set rs=cmd.Execute<font color=$00ff00>( ,p)</font>
<font color=$ff0000>RsToTable rs</font>
摘自ASP&amp;Web数据库 p284,旗标出版公司
我没有调试环境,还有点疑问,Execute( ,p)的参数p前为什么有个逗号?
RsToTable rs又是什么意思?
 
RsToTable rs 应该是将rs的内容生成页面上的表格.是自己写的一个过程.(猜得)
 
RsToTable是一个过程,rs是其参数,类型是recordset
 
RsToTable是把数据用转换成html表格的,明白了
那Execute( ,p)?,p是第二个参数吗?第一个参数省略了还是印刷错误?
不好意思,好像这个贴子不是我提问..
 
sqlserver的存储过程默认第一个参数是返回值(也是猜的)
 
Where is 高手?
 
to popeye:
RsToTable 是一个内建的过程,你看到前面有一段"<!--#include file="RsToTab.asp" -->" ,在asp里也可以写过程,RsToTable就是
在RstoTable里的一个过程了。
To Raider:
这有一段代码,希望对你有所帮助:
//用command来执行
<!--#include file="../adovbs.inc" -->
<!--#include file="RsToTab.asp" -->
<%
Head="st0b.asp - 执行 SQL Server 的 Stored Procedure (reptq1)"
vServer=Request("server")
uid=Request("uid")
pwd=Request("pwd")
%>
<html>
<head>
<title><%=Head%></title>
</head>
<body bgcolor="#FFFFFF">
<h2 Align="Center"><%=Head%></h2>
<hr>
<form Action="st0b.asp" Method="GET">
<p>Server:<input type="text" Name="Server" Size="10" value="<%=vServer%>"> ?uid:<input
type="text" Name="uid" Size="10" value="<%=uid%>"> ?pwd:<input type="text" Name="pwd"
Size="10" value="<%=pwd%>"> ?<input type="submit" value=" 执行 reptq1 "> </p>
</form>
<%
If vServer <> "" then
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={SQL Server};database=pubs;server=" &amp;
vServer &amp;
";uid=" &amp;
uid &amp;
";pwd=" &amp;
pwd
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "reptq1"
Set rs = cmd.Execute
RsToTable rs
else
Response.Write "<H3 Align=Center>请输入 server、uid及pwd 以进行连接!</H3>"
End If
%>
</body>
</html>


//用Connection来执行
<!--#include file="../adovbs.inc" -->
<!--#include file="RsToTab.asp" -->
<%
Head="st0a.asp - 执行 SQL Server 的 Stored Procedure (reptq1)"
vServer=Request("server")
uid=Request("uid")
pwd=Request("pwd")
%>
<html>
<head>
<title><%=Head%></title>
</head>
<body bgcolor="#FFFFFF">
<h2 Align="Center"><%=Head%></h2>
<hr>
<form Action="st0a.asp" Method="GET">
<p>Server:<input type="text" Name="Server" Size="10" value="<%=vServer%>"> ?uid:<input
type="text" Name="uid" Size="10" value="<%=uid%>"> ?pwd:<input type="text" Name="pwd"
Size="10" value="<%=pwd%>"> ?<input type="submit" value=" 执行 reptq1 "> </p>
</form>
<%
If vServer <> "" then
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={SQL Server};database=pubs;server=" &amp;
vServer &amp;
";uid=" &amp;
uid &amp;
";pwd=" &amp;
pwd
Set rs = conn.Execute( "reptq1" )
RsToTable rs
else
Response.Write "<H3 Align=Center>请输入 server、uid、及 pwd 以进行连接</H3>"
End If
%>
</body>
</html>
 
在ASP中使用存储过程
  使用SQL Server数据库,你可使用存储过程直接在数据库中存储并运行功能强大的任务,而不在自己的ASP脚本中实现它们,因为存储过程位于数据库服务器上,因而具有更高的性能并能减少网络负载。本文旨在通过实例说明在ASP中如何调用存储过程并传递输入参数的方法。
  下面我们就通过一个实例来说明这种技术的使用方法(文件adovbs.inc可在C:/Program Files/Common Files/System/ADO下找到):
安装SQL Server后,数据库pubs中自带存储过程byroyalty,语句为(@percentage就是输入参数):
Alter PROCEDURE byroyalty @percentage int
AS
select au_id from titleauthor
where titleauthor.royaltyper = @percentage
ASP源程序:
<% @LANGUAGE = VBScript %>
<!--#include file="adovbs.inc"-->
<%
Response.Expires = 0
Dim Cnn, objRS,strConn,objCmd, objParam
Const strIn = 30    '存储过程的输入参数,为简化程序, 直接设置该值.

' 建立连接
Set Cnn = Server.CreateObject("ADODB.Connection")
strConn ="Provider=sqloledb;" &amp;
_
   "Data Source=16.62.5.8;Initial Catalog=pubs;User Id=sa;Password=;"
Cnn.Open strConn

' 创建Command对象
Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.CommandText = "byroyalty"     '存储的过程名
objCmd.CommandType = adCmdStoredProc   '将 CommandText 作为存储过程名进行计算
Set objCmd.ActiveConnection = Cnn

'创建并定义参数
Set objParam = objCmd.CreateParameter ("@percentage", adInteger, adParamInput, 4,
strIn)
objCmd.Parameters.Append objParam

Set objRS = objCmd.Execute()
%>
<HTML>
<BODY>
下面输出结果, 输入参数为:
<%= objCmd.Parameters("@percentage") %> .
<BR><BR> au_id<Br>
<%
While Not objRS.EOF
Response.Write Server.HTMLEncode(objRS("au_id")) &amp;
"<Br>"
objRS.MoveNext
Wend

objRS.close: Cnn.close
Set objRS = Nothing: Set Cnn = Nothing
Set objParam = Nothing: Set objCmd = Nothing
%>
</BODY>
</HTML>
  除了可传递输入参数外,还可以使用返回码和输出参数返回值,由于篇幅关系,笔者不再举例,有兴趣可去我的主页http://wuf.bentium.net 下载更多的源程序,另外也可参考VB6.0的MSDN文档中有关ADO的部分和SQL Server7.0 的帮助文档。

(作者:吴丰 2000年02月22日 16:40)
 
hehe, asp中只有on error resume next, 没有goto:-(
调用sp很简单, 直接execute也可以,但返回的数据有时会有问题:-)
关于这一点,去看看有关delphi下sp的问题.
 
多人接受答案了。
 
后退
顶部