急!!!为什么asp不能得到从存储过程中返回的值?
为什么asp不能得到从存储过程中返回的值?
我的存储过程:
create proc proc_web
@sm varchar(50),
@bzz varchar(30),
@lx varchar(10)
as
declare @sqlstr nvarchar(1000)
set @sqlstr='select sm,kzh from zsmk where bzz like ''%'+@bzz+'%'''
if (@sm<>'')
set @sqlstr=@sqlstr+' and sm like ''%'+@sm+'%'''
if (@lx<>'')
set @sqlstr=@sqlstr+' and left(ltrim(flh1),1)='''+@lx+''''
set @sqlstr=@sqlstr+' order by sdny desc'
exec sp_executesql @sqlstr,N' @sm varchar(80),@bzz varchar(60),@lx varchar(2)',@sm,@bzz,@lx
我在asp的网页中
sql="exec proc_web '"&sm&"','"&bzz&"','"&lx&"'"
rs.open sql,conn,1,1
用response.write sql
输出的值,在查询分析器中运行是有记录的
而用response.write rs.recordcount输出的值是-1,
也就是没得到记录集,请问这是怎么回事?
应该怎么解决?
问题点数:50、回复次数:16Top
1 楼ghaihua(晨昕)回复于 2005-07-26 14:51:19 得分 2
这样好像得到Recordcount的就是-1,后来我不得不另写一个过程来计算RecordcountTop
2 楼ghaihua(晨昕)回复于 2005-07-26 14:52:09 得分 1
应该不是没有得到记录集的。Recordset里面应该是有数据。Top
3 楼binbin50(彬彬)回复于 2005-07-26 15:04:19 得分 10
create proc proc_web
@sm varchar(50),
@bzz varchar(30),
@lx varchar(10)
as
SET NOCOUNT ON --加這一句試試
declare @sqlstr nvarchar(1000)
set @sqlstr='select sm,kzh from zsmk where bzz like ''%'+@bzz+'%'''
if (@sm<>'')
set @sqlstr=@sqlstr+' and sm like ''%'+@sm+'%'''
if (@lx<>'')
set @sqlstr=@sqlstr+' and left(ltrim(flh1),1)='''+@lx+''''
set @sqlstr=@sqlstr+' order by sdny desc'
exec sp_executesql @sqlstr,N' @sm varchar(80),@bzz varchar(60),@lx varchar(2)',@sm,@bzz,@lx
Top
4 楼chnj(莱尔)回复于 2005-07-27 09:43:57 得分 0
不行呀!
还是同样的错误!
有没有其它的方法?Top
5 楼chnj(莱尔)回复于 2005-07-27 13:31:47 得分 0
怎么都没人帮忙的?急呀!Top
6 楼yonghengdizhen(等季节一过,繁花就凋落)回复于 2005-07-27 14:08:34 得分 2
换游标类型Top
7 楼surferc((大妹子,缘分啊!))回复于 2005-07-27 15:42:36 得分 20
首先你要换用ADODB.Command的方法来执行存储过程(ADODB.Command的用法在csdn搜一下很多)
其实如果你在同一个存储过程中同时返回记录集+返回值,那么就要先rs.close再取返回值。
set Cmd = Server.CreateObject("ADODB.Command")
Cmd.ActiveConnection = conn
Cmd.CommandText = "存储过程名"
Cmd.CommandType = adCmdStoredProc
Cmd.Parameters.Append Cmd.CreateParameter............. ->设置输入输出
Cmd.Parameters.Append Cmd.CreateParameter("@total", adInteger, adParamOutput, output) ->例如这是一个返回总数的输出
Set adoRS = Cmd.Execute ->执行
......你要做的处理
....
adoRS.close ->关闭
total=Cmd.Parameters("@total").Value ->关闭后再取返回值
大概就是这个意思了。
Top
8 楼chnj(莱尔)回复于 2005-08-04 10:01:58 得分 0
能不能再详细一点?
如果我想输出的是一个select语句呢?也就是一个记录集,那应该怎么输出的?
还有那个输入输出怎么设置的?能不能举个例子?Top
9 楼QQgenie(妖魔鬼怪)回复于 2005-08-04 10:15:48 得分 2
http://community.csdn.net/Expert/topic/4182/4182167.xml?temp=7.284182E-02Top
10 楼net205(人不可以无耻到这种地步)回复于 2005-08-04 10:15:57 得分 2
你那proc没有返回值吧,要取返回值,output值,好像只有用Command了,,,搜索下。。Top
11 楼chnj(莱尔)回复于 2005-08-04 13:15:09 得分 0
我用command做了,但是还是说
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
有什么办法呀?帮忙一下!Top
12 楼chnj(莱尔)回复于 2005-08-04 13:16:32 得分 0
QQgenie(妖魔鬼怪) :
你给的那个贴子里用的取的是count记录总数,有没有办法做select mc,kzh from zsmk
也就是取出select出来的记录集呀?Top
13 楼itzhiren(itzhiren)回复于 2005-08-04 13:31:15 得分 10
你用getrows试试Top
14 楼itzhiren(itzhiren)回复于 2005-08-04 13:32:27 得分 0
我用command做了,但是还是说
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
//////////////////////////////////////////////////////////////////
你确认文件中包含了adovbs.inc文件了吗?Top
15 楼itzhiren(itzhiren)回复于 2005-08-04 13:33:28 得分 1
getrows的用法,请参考:
http://itzhiren.blogdriver.com/itzhiren/757195.htmlTop
16 楼chnj(莱尔)回复于 2005-08-04 14:10:50 得分 0
itzhiren(itzhiren) :
能不能举个例子呀?我这个实在是不会做!拜托你了!
就是在存储过程中取出值来实现分页的功能
create proc proc_web
@sm varchar(50),
@bzz varchar(30),
@lx varchar(10)
as
declare @sqlstr nvarchar(1000)
set @sqlstr='select sm,kzh from zsmk where bzz like ''%'+@bzz+'%'''
if (@sm<>'')
set @sqlstr=@sqlstr+' and sm like ''%'+@sm+'%'''
if (@lx<>'')
set @sqlstr=@sqlstr+' and left(ltrim(flh1),1)='''+@lx+''''
set @sqlstr=@sqlstr+' order by sdny desc'
exec sp_executesql @sqlstr,N' @sm varchar(80),@bzz varchar(60),@lx varchar(2)',@sm,@bzz,@lx
就是这个存储过程,分页只要显示sm就行了!Top




