说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

存储过程分页有点问题,谁帮我看一下

编辑:说三道四文库 发布时间:2018-04-27 05:23
HTML文档下载 WORD文档下载 PDF文档下载
存储过程分页有点问题,谁帮我看一下
发贴心情
存储过程分页用asp来实现的,请实例帖出来,谢谢
存储过程我写好了
但是用asp不能完整实现,请帮我看一下哪错了
具体情况:
分页可以了

主要问题
"因为我加了keyword,当返回0记录时出错超出总页数时出错请问怎么办"

具体代码如下
存储过程:

--//音乐列表存储过程
--//三个参数
--//    @KeyWord:关键字
CREATE            PROCEDURE PROC_MusicList
@iPageNo int,
@iPageSize int,
@KeyWord nvarchar(30)
--WITH ENCRYPTION
AS

-- 定义局部变量 
declare @intBeginID int
declare @intEndID int
declare @intAllRecordCount int
declare @intPageCount int
declare @intRowCount int

Begin

--/*-- 关闭计数 --*/
Set nocount on

--//    取得音乐总条数
select @intAllRecordCount = count(MusicID) from Music_MusicList where(MusicName like ''%''+@KeyWord+''%'')
if (@intAllRecordCount = 0)
Return 0

--//    判断页数是否正确
if (@iPageNo-1)*@iPageSize>@intAllRecordCount
Return 0

--//    求开始的音乐记录ID号
set @intRowCount = (@iPageNo-1)*@iPageSize+1

--//    限制页页条数
set rowcount @intRowCount
select @intBeginID = MusicID FROM Music_MusicList where(MusicName like ''%''+@KeyWord+''%'') order by MusicID Desc


--//    求结束的音乐记录ID号
set @intRowCount=@iPageNo*@iPageSize
--//    限制页页条数
set rowcount @intRowCount
select @intEndID = MusicID FROM Music_MusicList where(MusicName like ''%''+@KeyWord+''%'') order by MusicID Desc

--//    恢复系统变量
set rowcount 0
set nocount off

select a.MusicID,a.MusicName, a.IsGood, a.Hits, a.IsCheck, a.IssueTime,a.ClassID, a.SongerID, a.SpecialID,b.songername From Music_MusicList as a,(select id as SongerID2,songername from MusicSonger) as b
where (a.SongerID = b.SongerID2) and (a.MusicName like ''%''+@KeyWord+''%'') and (a.MusicID between @intEndID and @intBeginID)
ORDER BY a.IssueTime DESC
return(@@rowcount)
End
GO


asp代码:

<form name="form1" method="get" action="<%=Request.ServerVariables("URL")%>">
        <table width="290" border="0" cellspacing="2" cellpadding="2">
          <tr align="center"> 
            <td>关键字</td>
            <td><input name="KeyWord" type="text" class="submitstyle" id="KeyWord"></td>
            <td><input type="submit" name="Submit" value="搜索"></td>
          </tr>
        </table>
      </form>      <table width="98%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
        <tr align="center" bgcolor="#efefef"> 
          <td height="30">序号</td>
          <td>歌曲名称</td>
          <td>歌手</td>
          <td>更新日期</td>
          <td>加入列表</td>
          <td>推荐</td>
          <td>管理</td>
        </tr><%
Page = Request("Page")
if Page="" or not IsNumerIC(Page) or Page<1 then
Page = 1
else
Page = Cint(Page)
end if
PageSize = 10
Set Str = server.createobject("AdpostSub.AspSub")
KeyWord = Trim(Request.QueryString("KeyWord"))
If KeyWord<>"" then
KeyWord = Str.HTMLEncode(KeyWord)
else
KeyWord = ""
end if
Set Str = nothing
set Db = Server.CreateObject("AdpostDb.AspDbClass")
set cmd=server.CreateObject("adodb.command")
Set Rs = Server.CreateObject("ADODB.RecordSet")
''Rs.CursorLocation = 3
set cmd.ActiveConnection=Db.Conn
cmd.CommandText = "PROC_MusicList"
''cmd.CommandType =adCmdStoredProc
cmd.CommandType = &H0004
cmd.Parameters.Append cmd.CreateParameter("@iPageNo",3,1,4,Page)
cmd.Parameters.Append cmd.CreateParameter("@iPageSize",3,1,4,PageSize)
cmd.Parameters.Append cmd.CreateParameter("@KeyWord",200,1,30,KeyWord)
''cmd.Parameters.Append cmd.CreateParameter("@RETURN_value",3,4)
Set Rs = cmd.Execute()
''response.write cmd("@RETURN_value")
if Rs.eof then
%><tr align="center"> 
          <td height="59" colspan="7">暂无歌曲</td>
        </tr>
<%
else
Do while not Rs.eof
%>
        <tr align="center"> 
          <td height="25"><%=Rs("MusicID")%></td>
          <td><%=Rs("MusicName")%></td>
          <td><%=Rs("songername")%></td>
          <td><%=FormatDateTime(Rs("IssueTime"),2)%></td>
          <td><%
          if Rs("IsCheck") then
              Response.Write("<a href=""Do_Music.asp?Action=CannelCheck&SpecialID="&Rs("SpecialID")&"&MusicID="&Rs("MusicID")&""" title=""撤消列表"">撤消列表</a>")
          else
              Response.Write("<a href=""Do_Music.asp?Action=SetCheck&SpecialID="&Rs("SpecialID")&"&MusicID="&Rs("MusicID")&""" title=""加入列表""><font color=""red"">加入列表</font></a>")
          end if
          %></td>
          <td><%
          if Rs("IsGood") then
              Response.Write("<a href=""Do_Music.asp?Action=CannelIsGood&MusicID="&Rs("MusicID")&""" title=""取消推荐""><font color=""red"">取消推荐</font></a>")
          else
              Response.Write("<a href=""Do_Music.asp?Action=SetIsGood&MusicID="&Rs("MusicID")&""" title=""加入推荐"">加入推荐</a>")
          end if
          %></td>
          <td><a href="ModifyMusic.asp?MusicID=<%=Rs("MusicID")%>" title="修改">修改</a><a href="Do_Music.asp?Action=Delete&SpecialID=<%=Rs("SpecialID")%>&MusicID=<%=Rs("MusicID")%>" title="删除">删除</a></td>
        </tr><%
        Rs.MoveNext
Loop
        end if
        %>
      </table>
      <table>
      <tr>
          <td>当前是第<%=Page%>页 <%=PageSize%>条/页 <a href="admin_song.asp?Page=1">首页</a> <a href="admin_song.asp?Page=<%=Page-1%>">前页</a> <a href="admin_song.asp?Page=<%=Page+1%>">后页</a></td>
      </tr>
      </table><%
    Set Rs = nothing
    Set cmd = nothing
    set Db = nothing
%> </td>
  </tr>
</table>
你的代码我看得头都痛了,请你先看这篇文章吧:
---------------------------------------------
存储过程分页
if exists(select * from sysobjects where ID = object_id("up_TopicList"))
   drop proc up_TopicList
go
create proc up_TopicList 
            @a_ForumID int , @a_intDays int , @a_intPageNo int , @a_intPageSize tinyint
   as
       declare @m_intRecordNumber int
       declare @m_intStartRecord  int
       select @m_intRecordNumber = @a_intPageSize * @a_intPageNo
       select @m_intStartRecord = @a_intPageSize * (@a_intPageNo - 1) + 1
       if @a_intDays = 0                      --如果不限定天数
          begin
                /*求符合条件记录数*/
                select "RecordCount" = count(*)                         
                       from BBS where Layer=1 and ForumID = @a_ForumID 
               /*输出纪录*/ /*首先定义可滚动光标*/
               set rowcount @m_intRecordNumber
               declare m_curTemp Scroll cursor 
                       for
                          select a.ID ,a.Title , d.UserName , a.FaceID ,
                                'ContentSize' = datalength(a.Content) , 
                                'TotalChilds' = (select sum(TotalChilds) 
                                                        from BBS as b 
                                                        where a.RootID = b.RootID) 
                                'LastReplyTime' = (select max(PostTime) 
                                                          from BBS as c 
                                                          where a.RootID = c.RootID)
                                from BBS as a 
                                     join BBSUser as d on a.UserID = d.ID 
                                where Layer=1 and ForumID = @a_ForumID 
                                order by RootID desc , Layer , PostTime
               open m_curTemp
               fetch absolute @m_intStartRecord from m_curTemp
               while  @@fetch_status = 0 
                      fetch next from m_curTemp
               set rowcount 0 
               /*清场*/       
               CLOSE m_curTemp
               DEALLOCATE m_curTemp
          end                      
       else                                --如果限定天数          
          begin
                /*求符合条件记录数*/
                select "RecordCount" = count(*)                         
                       from BBS where Layer=1 and ForumID = @a_ForumID 
                            and dateadd(day , @a_intDays , PostTime) > getdate() 
              <!--插入以上绿色代码部分-->                                                
注:若在asp中调用存储过程的command对象为cm,则set rs=cm.execute,然后用set rs=rs.nextrecordset取下一条记录。 
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘