asp如何调用存储过程实现分页!(百度知道)

来源:互联网 发布:淘宝在哪搜索店铺名称 编辑:程序博客网 时间:2024/06/10 03:06

问题:

asp如何调用存储过程实现分页!

 

存储过程如下:
CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 字段名
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    @strWhere     varchar(2000) = ''  -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(1000)       -- 临时变量
declare @strOrder varchar(500)        -- 排序类型

if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ''
    if @strWhere != ''
        set @strTmp = ' where (' + @strWhere + ')'

    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + ']' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)

GO

请问我要用asp如何调用它,请各位写出详细的调用语句,包括分页。

 

 

最佳答案:

创建存储过程:

Create Proc ShowPages
       @PageSize int=10 ,--每页显示的记录数
       @PageCurrent int=1 ,--当前要显示的页号
       @FdName varchar(100)='' ,--主键名或者标识列名
       @SelectStr varchar(2000)='', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。
       @FromStr varchar(1000)='', --from子句,不包含from关键子,如:myTable或者myTable,yourTable
       @WhereStr varchar(2000)='', --Where子句,不包含where关键字,如空的,或者 id>2 等
       @OrderByStr varchar(1000)='',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
       @CountRows int output,     --返回记录总数
       @CountPage int output --返回总页数
as
--------定义局部变量---------
declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
declare @OrderBySqls varchar(1000) --order by 子句
declare @WhereSqls varchar(2000) --where 子句
declare @Sqls nvarchar(4000) --最终组合成的Sqls语句
declare @TmpStr varchar(2000) --临时
----------------------------
if @OrderByStr <> ''
       set @OrderBySqls = ' order by '+@OrderByStr
else
       set @OrderBySqls = ''
--------
if @WhereStr <> ''
       set @WhereSqls = ' where ('+@WhereStr+')'
else
       set @WhereSqls = ''
--------
set @TmpStr = @WhereSqls
--如果显示第一页,可以直接用top来完成
if @PageCurrent<=1
begin
       select @Id1=cast(@PageSize as varchar(20))
       exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls)
       goto LabelRes
end
---------------------------
select @Id1=cast(@PageSize as varchar(20))
          ,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
----------
if @WhereSqls <> ''
       set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
else
       set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
----------
set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
exec (@Sqls)
-----------
LabelRes:
-----返回总记录数
set @Sqls = 'select @a=count(1)     from '+@FromStr+@TmpStr
exec sp_executesql @sqls,N'@a int output',@CountRows output
-----返回总页数
if @CountRows <= @PageSize
       set @CountPage = 1
else
begin
       set @CountPage = @CountRows/@PageSize
       if (@CountRows%@PageSize) > 0
          set @CountPage = @CountPage + 1
end
return
GO


在ASP里调用:

page = trim(Request.QueryString("topage"))
if len(page) = 0 then page = 1
sqlfields=" ID,SortID,SortName,Title,Hits,UpdateTime,Passed "
table="newsList"
if SortID<>"" and isnumeric(SortID) and SortID >0 then
where1=stitle1&" and (SortID in(select SortID from NewsSort where ParentID="&sortid&") or SortID="&SortID&") "
else
where1=stitle1
end if
'Response.Write(where1)
set cmd = Server.CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn 'You can also just specify a connection string here
.CommandText = "ShowPages"
'.CommandType = adCmdStoredProc 'Requires the adovbs.inc file or typelib meta tag
'Add Input Parameters
.Parameters.Append .CreateParameter("@PageSize", 3, 1, , MaxPerpage)
.Parameters.Append .CreateParameter("@PageCurrent", 3, 1, , page)
.Parameters.Append .CreateParameter("@FdName", 200, 1, 100, "ID")
.Parameters.Append .CreateParameter("@SelectStr", 200, 1, 2000, sqlfields)
.Parameters.Append .CreateParameter("@FromStr", 200, 1, 1000, table)
.Parameters.Append .CreateParameter("@WhereStr", 200, 1, 2000, where1)
.Parameters.Append .CreateParameter("@OrderByStr", 200, 1, 1000, " UpdateTime desc")
'Add Output Parameters
.Parameters.Append .CreateParameter("@CountRows", 3, 2, , 1)
.Parameters.Append .CreateParameter("@CountPage", 3, 2, , 1)
'.Execute
End With
set NewsRs=cmd.execute()
for j=1 to MaxPerpage
       if NewsRs.EOF then exit for
       ......'此处与普通相同,故略去。
       NewsRs.MoveNext
Next
NewsRs.close '一定要关闭才能获取下面的返回值
CountRows1=cmd("@CountRows")
CountPage1=cmd("@CountPage")
prePage=abs(1-page)
if prePage<1 then prepage=1
nextPage=1+page
if nextPage >CountPage1 then nextPage=CountPage1
Call ShowPageCC(FileUrlName,CountRows1,MaxPerpage,true,true,"条新闻")


分页显示:

Sub ShowPageCC(FileUrlName,TotalNumber,MaxPerpage,ShowTotal,ShowAllPages,strUnit)
dim n, i,strTemp,strUrl
if totalnumber mod maxperpage=0 then
        n= totalnumber maxperpage
      else
        n= totalnumber maxperpage+1
      end if
      strTemp= "<table align='center'><form name='ShowPages' method='Post' action='" & FileUrlName & "'><tr><td>"
if ShowTotal=true then
     strTemp=strTemp & "共 <b>" & totalnumber & "</b> " & strUnit & "  "
end if
strUrl=JoinChar(FileUrlName)
      if page<2 then
         strTemp=strTemp & "首页 上页 "
      else
         strTemp=strTemp & "<a href='" & strUrl & "topage=1'>首页</a> "
         strTemp=strTemp & "<a href='" & strUrl & "topage=" & prePage & "'>上页</a> "
      end if

      if n-page<1 then
         strTemp=strTemp & "下页 尾页"
      else
         strTemp=strTemp & "<a href='" & strUrl & "topage=" & nextPage & "'>下页</a> "
         strTemp=strTemp & "<a href='" & strUrl & "topage=" & n & "'>尾页</a>"
      end if
       strTemp=strTemp & " 页次:<strong><font color=red>" & page & "</font>/" & n & "</strong>页 "
       strTemp=strTemp & " <b>" & maxperpage & "</b>" & strUnit & "/页"
if ShowAllPages=true then
     strTemp=strTemp & " 转到:<select name='topage' size='1' onchange='javascript:location=this.options[this.selectedIndex].value;'>"  
        for i = 1 to n  
         strTemp=strTemp & "<option value='" & strUrl & "topage=" & i & "'"
      if cstr(page)=cstr(i) then strTemp=strTemp & " selected"
      strTemp=strTemp & ">第" & i & "页</option>"  
        next
     strTemp=strTemp & "</select>"
end if
strTemp=strTemp & "</td></tr></form></table>"
if     n<>1 and TotalNumber<>"" then
     Response.Write strTemp
End if
End Sub

 

转自百度知道:http://zhidao.baidu.com/question/54363070.html?fr=qrl&cid=93&index=5&fr2=query

原创粉丝点击