CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

急!!!为什么asp不能得到从存储过程中返回的值?

楼主chnj(莱尔)2005-07-26 14:09:05 在 Web 开发 / 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

相关问题

  • ASP调用ORACLE存储过程,返回值有问题???急!
  • 在asp中如何得到存储过程的返回值?
  • 怎么在ASP中取得存储过程的返回值?
  • asp调用存储过程返回值问题
  • 在ASP中,怎样获取存储过程return返回的值??
  • 关于存储过程返回值!!!
  • 存储过程返回值的问题.
  • 关于存储过程的返回值.
  • 急!!! C# 中存储过程返回值
  • ****存储过程返回值的问题****

关键词

  • 存储过程
  • bzz
  • sqlstr
  • lx
  • sm
  • 值
  • kzh
  • 返回
  • varchar
  • flh

得分解答快速导航

  • 帖主:chnj
  • ghaihua
  • ghaihua
  • binbin50
  • yonghengdizhen
  • surferc
  • QQgenie
  • net205
  • itzhiren
  • itzhiren

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo