您的位置:首页 > 编程语言 > ASP

ASP分页存储过程问题,求解决

2017-01-02 14:39 441 查看
存储过程代码

CREATE  PROC dbo.sql_Page2

@TblName     sysname,            --要分页显示的表名

@FieldKey   sysname,            --用于定位记录的主键(惟一键)字段,只能是单个字段

@PageCurrent int=1,              --要显示的页码

@PageSize   int=10,             --每页的大小(记录数)

@FieldShow  nvarchar(1000)='',   --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段

@FieldOrder  nvarchar(1000)='',  --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序

@FiledWhere     nvarchar(1000)='',   --查询条件

@PageCount  int OUTPUT,         --总页数

@RecordCount  int OUTPUT  --总记录数

AS

DECLARE @sql nvarchar(4000)

SET NOCOUNT ON

--检查对象是否有效

IF OBJECT_ID(@TblName) IS NULL

BEGIN

RAISERROR(N'对象"%s"不存在',1,16,@TblName)

RETURN

END

IF OBJECTPROPERTY(OBJECT_ID(@TblName),N'IsTable')=0

AND OBJECTPROPERTY(OBJECT_ID(@TblName),N'IsView')=0

AND OBJECTPROPERTY(OBJECT_ID(@TblName),N'IsTableFunction')=0

BEGIN

RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@TblName)

RETURN

END

--分页字段检查

IF ISNULL(@FieldKey,N'')=''

BEGIN

RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)

RETURN

END

--其他参数检查及规范

IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1

IF ISNULL(@PageSize,0)<1 SET @PageSize=10

IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'

IF ISNULL(@FieldOrder,N'')=N''

SET @FieldOrder=N''

ELSE

SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)

IF ISNULL(@FiledWhere,N'')=N''

SET @FiledWhere=N''

ELSE

SET @FiledWhere=N'WHERE ('+@FiledWhere+N')'

--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)

IF @PageCount IS NULL

BEGIN

SET @sql=N'SELECT @RecordCount=COUNT(*)'

  +N' FROM '+@TblName

  +N' '+@FiledWhere

EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT

SET @PageCount=(@RecordCount+@PageSize-1)/@PageSize

END

   

--计算分页显示的TOPN值

DECLARE @TopN varchar(20),@TopN1 varchar(20)

SELECT @TopN=@PageSize,

@TopN1=@PageCurrent*@PageSize 

--第一页直接显示

IF @PageCurrent=1

EXEC(N'SELECT TOP '+@TopN

  +N' '+@FieldShow

  +N' FROM '+@TblName

  +N' '+@FiledWhere

  +N' '+@FieldOrder)

ELSE

BEGIN

SELECT @PageCurrent=@TopN1,

  @sql=N'SELECT @n=@n-1,@s=CASE WHEN @n<'+@TopN

   +N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST('+@FieldKey

   +N' as varchar(8000))),N'''''''') ELSE N'''' END FROM '+@TblName

   +N' '+@FiledWhere

   +N' '+@FieldOrder

SET ROWCOUNT @PageCurrent

EXEC sp_executesql @sql,

  N'@n int,@s nvarchar(4000) OUTPUT',

  @PageCurrent,@sql OUTPUT

SET ROWCOUNT 0

IF @sql=N''

  EXEC(N'SELECT TOP 0'

   +N' '+@FieldShow

   +N' FROM '+@TblName)

ELSE

BEGIN

  SET @sql=STUFF(@sql,1,1,N'')  

  --执行查询

  EXEC(N'SELECT TOP '+@TopN

   +N' '+@FieldShow

   +N' FROM '+@TblName

   +N' WHERE '+@FieldKey

   +N' IN('+@sql

   +N') '+@FieldOrder)

END

END

GO

网页代码

 <%

 table1="mtk_maimob"

 sqlfields=" id,from_url,user_agent,ip,time,str,tel,jump_url " 

 where1="1=1"

 MaxPerpage=20

set cmd = Server.CreateObject("ADODB.Command") 

 With cmd

 .ActiveConnection = connstr

 .CommandText = "sql_Page2"

 .CommandType = 4

 .CommandTimeout = 0

 .Prepared = true

 .Parameters.Append .CreateParameter("@TblName", 200, 1, 1000, table1)

 .Parameters.Append .CreateParameter("@FieldKey", 200, 1, 100, "id")    '主键

                 .Parameters.Append .CreateParameter("@PageCurrent", 3, 1, , page)    '要显示的页码

 .Parameters.Append .CreateParameter("@PageSize", 3, 1, , MaxPerpage)   '每页显示数量

     .Parameters.Append .CreateParameter("@FieldShow", 200, 1, 2000, sqlfields)    '要查询的字段    

     .Parameters.Append .CreateParameter("@FieldOrder", 200, 1, 1000, " id desc") '排序方式

 .Parameters.Append .CreateParameter("@FiledWhere", 200, 1, 2000, where1)          '条件

 .Parameters.Append .CreateParameter("@PageCount", 3, 2, , 1)           '总页数

      .Parameters.Append .CreateParameter("@RecordCount", 3, 2, , 1)         '总记录数

 End With

 set Rs=cmd.execute()

if not rs.EOF then

 for j=1 to MaxPerpage

 

                 %>

  

  <tr align="center" onmouseover="bgColor='#DDEAF8'" onmouseout="bgColor='white'">

  <td style="text-align:center;"><%=rs("id")%></td>

 <td style="text-align:center;"><%=rs("from_url")%></td>

                <td style="text-align:center;"><%=rs("user_agent")%></td>

<td style="text-align:center;" title="<%=rs("ip")%>"> <%=rs("str")%><%=cmd("@PageCount")%></td>

                

<td style="text-align:center;"> 

<%=rs("time")%>

</td>

                

 

              

   <td style="text-align:center;"><%=rs("tel")%></td>

               

            </tr>

           <%

Rs.MoveNext 

     Next

else

%>

                 <tr>

<td colspan="6" style="text-align:center;">很抱歉,暂无信息!</td>

                </tr>

<%

End if

 CountRows1=cmd("@RecordCount")

     CountPage1=cmd("@PageCount")

     prePage=abs(1-page) 

     if prePage<1 then prepage=1 

     nextPage=1+page 

     if nextPage >CountPage1 then nextPage=CountPage1 

%>

            <tr>

                <td colspan="6" style="text-align:right;"><%=LastNextPage(CountPage1,page,CountRows1)%></td>

            </tr>

<%

rs.Close

set rs=nothing

%>

为什么获取不到CountRows1和CountPage1的值,大虾们帮帮忙
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: