100分求在asp里面怎么调用sql server的存储过程!

enjsky 2004-06-12 08:15:14
各位
小弟想问一下
在asp里面怎么调用sql server的存储过程啊
希望大家给个例子
要有返回值的那种啊。
谢谢了,很急
马上给分。
...全文
262 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
enjsky 2004-06-19
  • 打赏
  • 举报
回复

接了吧
chinalinx 2004-06-14
  • 打赏
  • 举报
回复
sql="insert into lx(zt,date1,time1,nr,name,fjr,xx) values('"&replace(request("zt"),"'","''")&"','"&date&"','"&time&"','"&replace(request("nr"),"'","''")&"','"&request("name")&"','"&session("name")&"','"&an&"')"
conn.execute sql
enjsky 2004-06-14
  • 打赏
  • 举报
回复
谢谢各位,我现在已经可以调用没有参数返回的存储过程了,可是有参数返回的该怎么调用我还没搞清楚,怎么取得返回的值啊?

希望大家能帮我,搞清楚了这个问题就给分!!!!谢谢!!!
aspczlover 2004-06-12
  • 打赏
  • 举报
回复
if choose=1 改为:
if @choose=1
aspczlover 2004-06-12
  • 打赏
  • 举报
回复

1.调用存储过程的一般方法
先假设在sql server中有一存储过程dt_users:
CREATE PROCEDURE [dbo].[dt_users]
AS
select * from users
return
GO
第一种方法是不利用command对象,直接用recordset对象
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 这样就可
第二种方法是利用command对象
set comm=server.createobject("adodb.command")
comm.commantype=4
set comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1

2.给存储过程传递参数
如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!
比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:
参数keyword为关键字,choose是选择查询的方法。
CREATE PROCEDURE [dbo].[dt_bbs]
@keyword varchar(20)=null,
@choose int=null
as
if choose=1
select * from bbs where name like @keyword
else
select * from bbs where subject like @keyword
return
go
这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序
用第一种方法:
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&keyword&"',"&choose&""
rs.open sql,conn,1,1
用第二种方法:
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
set comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open comm,,1,1

3.进一步讨论
比较上面我所说的两种在asp种调用存储过程的方法,
第一种方法需要对象少,但recordset对象支持的属性少了很多,比如说:rs.recordcount,rs.pagecount,rs.absolutepage这些属性
都不支持,所以用第一种方法就有局限,比如说要分页显示纪录时,就必须要用到第二种方法。
我们用sql server中的存储过程目的是为了加快速度,但一个存储过程中sql语句有很多时,它的优势特别明显。如果sql语句不是很多,
而我们用第二种方法就必须多创建一个command对象,可能还会减慢速度!所以我们要均衡各方面的利益来使用存储过程。
不过我觉得不过速度怎样,使用存储过程可以使程序更加模块化,便于修改,和调试(可以直接在sql server下调试,而不用在ie下看asp
的结果)。
strollrise 2004-06-12
  • 打赏
  • 举报
回复
<%
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"
Set cmdTemp = Server.CreateObject("ADODB.Command") '建立命令对象
Set rst = Server.CreateObject("ADODB.Recordset") '建立记录集对象
cmdTemp.CommandText = "dbo.pd_test" '你所建的sql存储过程名称
cmdTemp.CommandType = 4 '命令类别为4,表示为存储过程
Set cmdTemp.ActiveConnection = Dataconn
Set tmpParam = cmdTemp.CreateParameter("Return Value", 3, 4, 4)
cmdTemp.Parameters.Append tmpParam
Set tmpParam = cmdTemp.CreateParameter("@BeginDate", 135, 1, 16, riqi)
'创建输入参数对象
cmdTemp.Parameters.Append tmpParam
rst.Open cmdTemp, , 1, 3 '生成查询结果
%>
  • 打赏
  • 举报
回复
再有看看这个例子:
http://www.wrclub.net/study/listarticle.aspx?id=2323

存储过程在ASP中的使用

在ADO中提供了对存储过程的访问,它需要用到command对象,在这个对象上用户可以直接执行SQL服务器的存储过程,而命令中所需要的参数可以借助于其属性Pamaters来进行处理。

注意 一个 Command 对象要想有效,必须和一个 Connection 对象相关联,方法是Command 对象的 ActiveConnection 属性就被设置到这个 Connection 对象。如果一个 Connection 对象不能被标识,在您将它与一个连接关联之前,Command 对象是无效的。


<% Dim oConn
Dim strConn
Dim oCmd
Dim oRs,ors1
dim aa
dim sql
Set oConn = Server.CreateObject("ADODB.Connection")
set oCmd = Server.CreateObject("ADODB.Command")
set ors1=Server.CreateObject("ADODB.RecordSet")
' 打开链接,使用用户标识SA,口令为空,连接为本地服务器上的数据库
strConn="Provider=SQLOLEDB;User ID=sa;Initial Catalog=pubs;Data Source="& Request.ServerVariables("SERVER_NAME")
'如果连接一个远端的数据库,该数据库地址为:10.82.88.105,用户为tmp,口令为123,
‘则可用下面的方法
‘ strConn="Provider=SQLOLEDB;User ID=tmp;pwd=123;Initial Catalog=tjbb;Data Source="& "10.82.88.110"
oConn.Open strConn
‘将建立的链接添加到命令的活动链接属性中
Set oCmd.ActiveConnection = oConn
' 设置调用存储过程byroyalty和参数,参数由?引入
oCmd.CommandText = "{call byroyalty(?)}"
oCmd.Parameters.Append oCmd.CreateParameter("@Percentage", adInteger, adParamInput)
' 提供输入的参数
oCmd("@Percentage") = 75
‘在asp中上述输入参数的使用也可不用参数属性来实现直接用VB中的&来形成命令文本中对应的数据即可
‘参数的使用在输出时是特别有用的
Set oRs = oCmd.Execute
ors1.activeconnection=oconn
‘该命令对象中也可应用一般的SQL语句使用Source和open属性,其中source指出数据源
ors1.source ="select * from [tmptable] where 年份=2000 and 月份=1"
ors1.cursortype=adopenstatic
ors1.open
virm 2004-06-12
  • 打赏
  • 举报
回复
set Cmd=server.createObject("ADODB.Command")
Cmd.commandText="Youfuntionn(para1,para2)"
set rs=Cmd.Execute
  • 打赏
  • 举报
回复
看看使用存储过程分页的例子

使用存储过程分页,这种情况又分为两种方式:

第一种,使用command对象,如下:

Set Cmd=server.CreateObject("Adodb.Command")
Cmd.ActiveConnection=conn
Cmd.CommandText="ycuu_gb_getmsg"
Cmd.CommandType=4'adCmdStoredProc
cmd.prepared=true'
set param=Cmd.CreateParameter("@iPageNo",adInteger,1,2,Page)
Cmd.Parameters.Append param
set param=Cmd.CreateParameter("@iPageSize",adInteger,1,2,PageSizeConst)
Cmd.Parameters.Append param
set rs=Cmd.execute


第二种,使用connection对象的执行方法直接执行,具体如下:

set rs=conn.execute ("execute ycuu_gb_getmsg "&page&", "&pagesizeConst)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧