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

数据库存储过程返回记录集的问题

楼主dephi(四眼田鸡)2002-07-02 11:06:39 在 Web 开发 / ASP 提问

原码如下:  
  Dim   oConn,oCmd,oParam,oRcset  
  Set   oConn=Server.CreateObject   ("ADODB.Connection")  
  oConn.Open     Session("DNS")  
  Set   oCmd   =   Server.CreateObject("ADODB.Command")  
  Set   oCmd.ActiveConnection   =   oConn  
  oCmd.CommandText   ="p_Business"  
  oCmd.CommandType   =adCmdStoredProc  
  Set   oParam=Server.CreateObject   ("ADODB.Parameter")  
   
  Set   oParam=oCmd.CreateParameter   ("@DoType",adInteger,adParamInput   ,8,0)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@Page",adInteger,adParamInput   ,8,page)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@PageSize",adInteger,adParamInput   ,8,10)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@UID",adInteger     ,adParamInput     ,8,Session("U_ID"))  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@Kind",adVarChar   ,adParamInput     ,20,"")  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@ReturnCount",adInteger   ,adParamOutput     ,8)  
  oCmd.Parameters.append   oParam    
  Set   oParam=oCmd.CreateParameter   ("@PageCount",adInteger   ,adParamOutput     ,8)  
  oCmd.Parameters.append   oParam    
   
   
  set   oRcset=Server.CreateObject   ("ADODB.RecordSet")  
  set   oRcset   =   oCmd.Execute()  
   
  dim   TotalRecord,   TotalPage  
  TotalRecord=oCmd("@ReturnCount")  
  TotalPage=oCmd("@PageCount")  
   
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
          While   not   oRcset.EOF     '这里出错?为什么?  
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        
                      '略。。。  
  oRcset.MoveNext    
          Wend  
   
  '为什么一对oRcset对象操作就报错!  
  '存储过程如何返回记录集给ASP应用程序  
  问题点数:100、回复次数:18Top

1 楼freezwy(网络自由人)回复于 2002-07-02 11:11:41 得分 0

使用set   oRcset   =   oCmd.Execute()  
  不用创建对象,如果是SP分页,请给出SP源代码Top

2 楼gshope(北京.Net)回复于 2002-07-02 11:13:59 得分 0

先在SQL运行p_Business,看返回的数据对不对,  
  Top

3 楼dephi(四眼田鸡)回复于 2002-07-02 11:15:15 得分 0

我把set   oRcset=Server.CreateObject   ("ADODB.RecordSet")注释掉  
  可错误依旧  
  Top

4 楼dephi(四眼田鸡)回复于 2002-07-02 11:18:39 得分 0

在SQL上运行p_Business,返回的数据数据完全正确  
  Top

5 楼dephi(四眼田鸡)回复于 2002-07-02 11:25:05 得分 0

存储过程:  
  PROCEDURE   p_Business  
  @DoType     int,  
  --   0:Show   All     1:Select   by   Kind    
  @Page int,  
  @PageSize int,    
  @UID int,  
  @Kind varchar(10),  
  @ReturnCount   int   output,  
  @PageCount int   output  
  AS  
  declare   @iStart   int  
  declare   @iEnd   int  
  declare   @iPageCount   int  
   
  create   table   #tempBusiness(  
  ID   int   IDENTITY,  
  M_ID int,  
  Kind varchar(10),  
  M_Name     varchar(100),  
  Introduction   varchar(500),  
  Needtime float,  
  Num_new int,  
  New_M int,  
  Hot_M int,  
  KindName varchar(20)  
  )  
   
     
   
  if   @DoType=0  
  begin  
  insert   into   #tempBusiness   (M_ID,   Kind,   M_Name,  
      Introduction,   NeedTime,   Num_New,   New_M,   Hot_M,   KindName)  
  Select   m.M_ID,   m.Kind,   m.M_Name,   m.MarketPrice,   m.Price,   m.Price_New,    
      m.Introduction,   m.NeedTime,   m.Num_New,   m.New_M,   m.Hot_M,   k.KindName  
  from   Merchandise   m,Kind   k  
  where   m.U_ID=@UID   and   m.Kind=k.K_ID  
   
  set   @ReturnCount=@@rowcount  
  Set   @iPageCount=@ReturnCount  
   
  end  
   
  if   @DoType=1  
  begin  
  insert   into   #tempBusiness   (M_ID,   Kind,   M_Name,  
      Introduction,   NeedTime,   Num_New,   New_M,   Hot_M,   KindName)  
  Select   m.M_ID,   m.Kind,   m.M_Name,   m.MarketPrice,   m.Price,   m.Price_New,    
  m.Introduction,   m.NeedTime,   m.Num_New,   m.New_M,   m.Hot_M,   k.KindName  
  from   Merchandise   m,Kind   k  
  where   m.U_ID=@UID   and   m.Kind=k.K_ID   and   m.Kind=@Kind  
   
  set   @ReturnCount=@@rowcount  
  Set   @iPageCount=@ReturnCount  
  end  
   
   
  set   @iPageCount=CEILING(@iPageCount/@PageSize)+1  
  set   @PageCount=@iPageCount  
  if   @Page>@iPageCount  
      set   @Page=@iPageCount  
   
  set   @iStart=(@Page-1)*@PageSize  
  set   @iEnd=@iStart+@PageSize+1  
   
  select   M_ID,   Kind,   M_Name,    
      Introduction,   NeedTime,   Num_New,   New_M,   Hot_M,   KindName  
  FROM   #tempBusiness  
  WHERE   [ID]>@iStart   AND   [ID]<@iEnd  
   
  DROP   TABLE   #tempBusinessTop

6 楼nittystone(没有想法)回复于 2002-07-02 11:25:24 得分 100

这儿出错是因为rs不是一个记录集  
  可能得原因  
  1.存储过程没有返回记录集合  
  2.存储过程里面有   print  
  3.存储过程里面应该有   set   nocount   on  
  这样才能返回记录集  
   
  存储过程返回得记录集合怎么才能分页?  
  这样:  
  set   Rs   =   server.createobject("ADODB.RecordSet")  
  Rs.CursorType   =3  
  Rs.LockType   =3  
  Rs.CursorLocation   =3  
  set   Rs.Source   =cmdExec   'cmdExec   为command   对象  
  Rs.Open    
   
  给分!!!  
  Top

7 楼dephi(四眼田鸡)回复于 2002-07-02 11:51:19 得分 0

楼上的老大  
  那为什么返回值没了呢?  
  比如:@ReturnCount   返回为空Top

8 楼ssm1226(雨中人(虚心学习))回复于 2002-07-02 12:09:36 得分 0

存储过程分页思路:  
  1、参数@PageNo,@PageSie,  
  2、获取符合条件的记录总数  
  使用set   rowcount   获取最大及最小ID  
  最后获取中使用ID>minID   and   ID<maxIDTop

9 楼ssm1226(雨中人(虚心学习))回复于 2002-07-02 12:11:15 得分 0

注意,使用以上分页时,ID在表中值唯一Top

10 楼nittystone(没有想法)回复于 2002-07-02 12:18:10 得分 0

怎么每找到你声明这个返回参数啊。。  
  下面的用这个  
      oCmd.Parameter.Refresh()  
  效率低了一点点   ,不容仪出错。  
   
   
  Set   oParam=Server.CreateObject   ("ADODB.Parameter")  
   
  Set   oParam=oCmd.CreateParameter   ("@DoType",adInteger,adParamInput   ,8,0)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@Page",adInteger,adParamInput   ,8,page)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@PageSize",adInteger,adParamInput   ,8,10)  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@UID",adInteger     ,adParamInput     ,8,Session("U_ID"))  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@Kind",adVarChar   ,adParamInput     ,20,"")  
  oCmd.Parameters.append   oParam  
  Set   oParam=oCmd.CreateParameter   ("@ReturnCount",adInteger   ,adParamOutput     ,8)  
  oCmd.Parameters.append   oParam    
  Set   oParam=oCmd.CreateParameter   ("@PageCount",adInteger   ,adParamOutput     ,8)  
  oCmd.Parameters.append   oParam    
  Top

11 楼leeeel(我笑你多情)回复于 2002-07-02 12:21:28 得分 0

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
          While   not   oRcset.EOF     '这里出错?为什么?  
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        
                      '略。。。  
  oRcset.MoveNext    
          Wend  
  调试一下:  
   
          While   not   oRcset   is   Nothing                      
       While   not   oRcset.EOF  
  oRcset.MoveNext    
                      Wend  
                      oRcset.NextRecordSet  
          Wend  
  '还会出错的话就怪了  
   
  Top

12 楼dephi(四眼田鸡)回复于 2002-07-02 12:29:05 得分 0

现在记录集有了  
  可返回值没了  
  Top

13 楼leeeel(我笑你多情)回复于 2002-07-02 12:40:34 得分 0

可返回值没了?  
  什么返回值呢?  
   
  把返回值改成  
  select   @aaa=''  
  就能取到了Top

14 楼leeeel(我笑你多情)回复于 2002-07-02 12:44:27 得分 0

你dim   TotalRecord,   TotalPage  
  TotalRecord=oCmd("@ReturnCount")  
  TotalPage=oCmd("@PageCount")  
  中多了个圈@吧?(我也不太清楚)  
  在记录集里返回算了!  
  不要所谓的返回参数。  
  Top

15 楼nittystone(没有想法)回复于 2002-07-02 12:53:47 得分 0

不知道维什莫  
  不过我在开发中也用   返回一个一航一列的记录集来用Top

16 楼S.F.(chinasf.cnblogs.com)回复于 2002-07-02 14:04:38 得分 0

echo   off  
   
  echo   onTop

17 楼linfei(林飞)回复于 2002-07-02 14:42:33 得分 0

这么写:  
  oRcset.open   oCmd  
   
  如果要分页,可以这么写:  
  oRcset.CursorType=3  
  oRcset.open   oCmdTop

相关问题

  • 通过ADO可以得到数据库存储过程返回的记录集吗?
  • 数据库存储过程!?
  • 如何用Informix数据库的存储过程返回结果集?
  • 如何调用数据库中带返回值的存储过程?
  • 如何从数据库的存储过程中返回数据集?
  • 高分求救!存储过程返回记录集的问题!
  • 无返回记录集的存储过程的调用
  • 关于存储过程返回记录集,结果是。。。
  • 存储过程和返回记录集的问题(给100分)
  • 存储过程可以返回记录集吗?

关键词

  • 存储过程
  • 数据
  • server
  • ocmd
  • oparamset oparam
  • orcset
  • dotype
  • adinteger
  • adparaminput
  • createparameter

得分解答快速导航

  • 帖主:dephi
  • nittystone

相关链接

  • Web开发类图书

广告也精彩

反馈

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