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

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

请问这是什么原因呢?

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

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

各位高手帮帮我吧............
...全文
126 点赞 收藏 15
写回复
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 楼上的. 晕, 这样不就等于没用存储过程了吗?

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

急盼高人啊...........
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告