关于ASP调用存储过程

lt66txy 2002-09-19 04:16:57
CREATE PROCEDURE test1
@cname varchar(20)
AS
insert class(class_name) values(@cname)
declare @id int
set @id=@@identity
select [id]=@id
存储过程的功能:新增一条记录,返回identity的值(表中有identity字段)
在sql的查询分析器中执行正常!!


但在ASP中调用中,总是返回
ADODB.Recordset 错误 '800a0e78'
对象关闭时,操作不被允许。


set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr

set comm = Server.CreateObject("adodb.command")
comm.CommandText = "test1" '过程名
comm.CommandType = 4

set comm.activeconnection = conn
comm.parameters(1) = "testnew"
set rs=comm.execute
response.write rs.eof

出错语句是:
response.write rs.eof

但在SQL里已经成功新增记录,即"set rs=comm.execute"是成功执行的
...全文
43 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lt66txy 2002-09-24
  • 打赏
  • 举报
回复
谢谢liuyongxu!!!
虽然这样速度会有所下降,但是总算是成功了
liuyongxu 2002-09-24
  • 打赏
  • 举报
回复
我曾经碰到过这个问题
你的连接方法是PROVIDER=SQLOLEDB吧?
把它改成DRIVER={SQL server}这种形式的试试
cleo 2002-09-21
  • 打赏
  • 举报
回复
我经常是这样作的:
1。储存过程:
CREATE PROCEDURE test1
@cname varchar(20)
AS
insert class(class_name) values(@cname)
select @@identity as [lastId]

asp:
set conn=server.createobject("ADODB.CONNECTION")
set rs=conn.open("exec test1 'testnew'" )
response.write rs("lastId")

freezwy 2002-09-21
  • 打赏
  • 举报
回复
set rs=comm.Execute
ssm1226 2002-09-20
  • 打赏
  • 举报
回复
这个:
CREATE PROCEDURE test
@cname varchar(20)
AS
update class set class_name='家用电器' where class_name=@cname
select top 10 * from class

就可以

lt66txy 2002-09-20
  • 打赏
  • 举报
回复
上面这位朋友,你写的这个存储过程和我写的第二个一样呀!!
但我也写了,如果在sql的查询分析器中正常返回需要的记录
但在ASP调用中还是:
ADODB.Recordset 错误 '800a0e78'
对象关闭时,操作不被允许。


我需要在ASP中也能正常得到数据
lt66txy 2002-09-19
  • 打赏
  • 举报
回复
那如何才能传递结果到rs中??
andyer 2002-09-19
  • 打赏
  • 举报
回复
在这里不可以用recordset来接收数据,只不过执行了comm.execute
但并没有传递结果到RS中,当然就会出错啦!
lt66txy 2002-09-19
  • 打赏
  • 举报
回复
请众大侠详细解答:谢谢
要是这个存储过程的功能是更新某字段的值,然后返回符合条件的记录集时该怎么办?
CREATE PROCEDURE test
@cname varchar(20)
AS
update class set class_name='家用电器' where class_name=@cname
select top 10 * from class


在sql的查询分析器中正常返回需要的记录
但在ASP调用中还是:
ADODB.Recordset 错误 '800a0e78'
对象关闭时,操作不被允许。

freezwy 2002-09-19
  • 打赏
  • 举报
回复
rs.eof不适用这个地方,你可以在你的SP中增加一个OUTPUT类型,就是ID,你可以使用
CREATE PROCEDURE test1
@cname varchar(20)
@vid integer output
AS
insert class(class_name) values(@cname)
set @vid=@@identity

调用如下:
'先包含adovbs.inc
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
set comm = Server.CreateObject("adodb.command")
set comm.activeconnection = conn
comm.commandtext="test1"
comm.commandtype=adcmdstoredproc
comm.Parameters.Append comm1.CreateParameter("@cname",advarchar,adParamInput,20,"testnew")
comm.Parameters.Append comm1.CreateParameter("@vid",adinteger,adParamOutput,,1)
comm.Execute
namecount=comm.parameters("@vid").value
if namecount<>"" then
response.write "ok"
else
response.write "no"
end if

28,391

社区成员

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

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