急问:ASP中使用从存储过程返回的数据.

Dan1980 2005-05-30 10:48:40
我有一个存储过程, 在里面创建了一个临时表, 然后往该临时表里面插入了一些数据, 再把这些数据SELECT出来. 我用查询分析器执行该存储过程时一切正常, 可以显示结果表格. 可到ASP中, 我用:
Set rs = conn.Execute("存储过程名")
while(rs.EOF) {
'...
rs.MoveNext()
}
就提示"对象关闭时,不允许操作"

请问这是什么原因呢?

如果我不用临时表, 而是用一个普通表, 我明明在前面加了If Exist Drop....., 可ASP却说"该表已经存在", 同样, 用查询分析器执行就没有问题.

只有直接从已有的表中SELECT才能正常.

各位高手帮帮我吧............
...全文
194 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan1980 2005-05-31
  • 打赏
  • 举报
回复
问题算是勉强解决了, 是一个CSDN的朋友让我用表值函数代替存储过程来解决的.

但是还是搞不懂为什么存储过程不能正确地返回记录集.

结贴吧.
sportdog 2005-05-31
  • 打赏
  • 举报
回复
conn.Execute("exec proc")
和conn.Execute("select * from table")都是当字符串来执行的,只要你的exec proc的结果是对的就可以了,和啥存储过程有啥关系?
位流 2005-05-30
  • 打赏
  • 举报
回复
这个问题我也碰到过,后来我解决了,就是把存储过程里的语句拷出来,放到execute里。

当然这不是好办法,但能解决问题。

:)

有空来我论坛逛逛

http://www.eob.cn/bbs
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
up
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
谢谢楼上的贴这么多.
不过你的代码似乎与我的问题关系不大啊.
mymyal123 2005-05-30
  • 打赏
  • 举报
回复
<%@ Language=VBScript %>

<%

Dim CmdSP

Dim adoRS

Dim adCmdSPStoredProc

Dim adParamReturnValue

Dim adParaminput

Dim adParamOutput

Dim adInteger

Dim iVal

Dim oVal

Dim adoField

Dim adVarChar



‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBScript 中没有预定义

adCmdSPStoredProc = 4

adParamReturnValue = 4

adParaminput = 1

adParamOutput = 2

adInteger = 3

adVarChar = 200



iVal = 5

oVal = 3



'建一个command对象

set CmdSP = Server.CreateObject("ADODB.Command")



'建立连结

CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"



'定义command 对象调用名称

CmdSP.CommandText = "sp_PubsTest"



'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)

CmdSP.CommandType = adCmdSPStoredProc



'往command 对象中加参数

'定义存储过程有直接返回值,并且是个整数,省缺值是4

CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)

'定义一个字符型输入参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")

'定义一个整型输入参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)

'定义一个整型输出参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)



'运行存储过程,并得到返回记录集

Set adoRS = CmdSP.Execute





'把每个记录打印出来,其中的字段是虚拟的,可以不用管

While Not adoRS.EOF



for each adoField in adoRS.Fields

Response.Write adoField.Name & "=" & adoField.Value & "<br/>" & vbCRLF

Next

Response.Write "<br/>"

adoRS.MoveNext

Wend



'打印两个输出值:

Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"

Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"





'大扫除

Set adoRS = nothing

Set CmdSP.ActiveConnection = nothing

Set CmdSP = nothing

%>
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
楼上的, 加上exec也没用....

直接在查询分析器里exec是可以的, 可以显示结果表格. 一到ASP中就不行了.
sportdog 2005-05-30
  • 打赏
  • 举报
回复
Set rs = conn.Execute("exec 存储过程名")
因该是这样吧.你直接在查询分析器里exec 存储过程名看看.

你单独运行你的存储过程返回的是数据集吗?
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
大家看看我的问题吧.....

自己up一下.
huangkc 2005-05-30
  • 打赏
  • 举报
回复
可能还是后台问题:
1、你在查询分析器中查询时,有了显示结果,再看一下消息页内容
2、你创建一个表或执行后存储过程后,你再刷新一下数据库,查看其表

3、若在存储过程应用临时表只要不是全局的,就不会有问题除非写错语句


Dan1980 2005-05-30
  • 打赏
  • 举报
回复
沉得好快!!! up
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
to itzhiren(itzhiren)

应该不是输入参数的问题, 我用没有参数的存储过程也一样报错. 至于adovbs.inc文件, 我没有用VB常量, 应该是不需要包含的.
king2410 2005-05-30
  • 打赏
  • 举报
回复
好多人都是说象 sportdog(会编程的流氓狗) 这样用,但我不知道为什么我和楼主这样用就不行
所以现在我都用和 mymyal123(风之森) 说的一样的方式来执行存储过程
itzhiren 2005-05-30
  • 打赏
  • 举报
回复
你的存储过程有没有输入参数?另外,你有没有包含adovbs.inc文件?
Dan1980 2005-05-30
  • 打赏
  • 举报
回复
to 楼上的. 晕, 这样不就等于没用存储过程了吗?

难道这个问题真的没法解决????

急盼高人啊...........

28,409

社区成员

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

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