|
共需要两个存储过程,第一个是负责分页的
- CREATEPROCEDURE[dbo].[USP_GetList]
- (
- @pageIndexint=1--当前页码0表示返回所有符合内容
- ,@pageSizeint=10--页尺寸
- ,@SIDnvarchar(30)=''--主键字段
- ,@strGetFieldnvarchar(1000)='*'--需要返回的列
- ,@strTableNamenvarchar(30)=''--表名
- ,@strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
- ,@strOrderBynvarchar(300)=''--排序
- --,@MemberIDint=0--会员ID
- )
- AS
- SETNOCOUNTON
- DECLARE@strSQLnvarchar(4000)
- DECLARE@startPosint
- DECLARE@endPosint
- DECLARE@numint
- SET@startPos=@pageSize*(@pageIndex-1)+1
- SET@endPos=@startPos+@pageSize-1
- --页大小*(页数-1)
- SET@num=@pageSize*(@PageIndex-1)
- IF@PageIndex!=0
- BEGIN
- IF@strWhere!=''
- SET@strSQL='SELECTTOP'+cast(@pageSizeasnvarchar(10))+''+@strGetField+'FROM'+@strTableName+'WHERE('+cast(@SIDasnvarchar(30))+'NOTIN(SELECTTOP'+cast(@numasnvarchar(20))+''+cast(@SIDasnvarchar(30))+'FROM'+@strTableName+'where'+@strWhere+'ORDERBY'+cast(@strOrderByasnvarchar(255))+'))and'+@strwhere+'ORDERBY'+cast(@strOrderByasvarchar(255))+''
- else
- SET@strSQL='SELECTTOP'+cast(@pageSizeasnvarchar(10))+''+@strGetField+'FROM'+@strTableName+'WHERE('+cast(@SIDasnvarchar(30))+'NOTIN(SELECTTOP'+cast(@numasnvarchar(20))+''+cast(@SIDasnvarchar(30))+'FROM'+@strTableName+'ORDERBY'+cast(@strOrderByasnvarchar(255))+'))ORDERBY'+cast(@strOrderByasvarchar(255))+''
- --SET@strSQL='SELECTTOP页大小*FROMUsersWHERE(IDNOTIN(SELECTTOP(页大小*(当前页-1))IDFROMUsersORDERBYIDDESC))ORDERBYIDDESC'
- END
- ELSE
- BEGIN
- IF@strWhere!=''
- SET@strSQL='select'+@strGetField+'from'+@strTableName+'where'+@strWhere+'orderby'+@strOrderBy
- ELSE
- SET@strSQL='select'+@strGetField+'from'+@strTableName+'orderby'+@strOrderBy
- END
- --print(@strSQL)
- EXEC(@strSQL)
- GO
第二个存储过程
- CREATEPROCEDURE[dbo].[USP_GetTotal]
- (
- @strTableNamenvarchar(30)='',
- @strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
- )
- AS
- SETNOCOUNTOFF
- DECLARE@strSQLnvarchar(2500)
- IF@strWhere!=''
- SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']where'+@strWhere
- ELSE
- SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']'
- EXEC(@strSQL)
- GO
下面是调用这个存储过程的两个函数。可以放到一个包含文件里
,注意,下面的函数里面使用的一些变量,是全局的变量,不是参数传入的,所以需要在调用函数钱,给全局变量赋值。
- <%
- '取记录总数存储过程
- publicfunctiongetDataRowCount(strTableName,strWhere)
- dimmaxCount
- dimmyobj
- dimrsCount
- maxCount=0
- Setmyobj=Server.CreateObject("ADODB.Command")
- withmyobj
- .ActiveConnection=conn
- .CommandText="USP_GetTotal"
- .CommandType=4
- .Prepared=true
- .Parameters.append.CreateParameter("@strTableName",200,1,30,strTableName)
- .Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
- SetrsCount=.Execute
- endwith
- Setmyobj=Nothing
- maxCount=rsCount("Total")
- rsCount.close:SetrsCount=Nothing
- getDataRowCount=maxCount
- endfunction
- '单表分页存储过程
- subgetDataRS()
- dimobj
- Setobj=Server.CreateObject("ADODB.Command")
- withobj
- .ActiveConnection=conn
- .CommandText="USP_GetList"
- .CommandType=4
- .Prepared=true
- .Parameters.append.CreateParameter("@pageIndex",3,1,4,iPageIndex)
- .Parameters.append.CreateParameter("@pageSize",3,1,4,iPageSize)
- .Parameters.append.CreateParameter("@SID",200,1,30,SID)'2000
- .Parameters.append.CreateParameter("@strGetField",200,1,1000,strGetField)
- .Parameters.append.CreateParameter("@tableName",200,1,30,strTableName)
- .Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
- .Parameters.append.CreateParameter("@strOrderBy",200,1,300,strOrderBy)
- Setrstobj=.Execute
- endwith
- Setobj=Nothing
- endsub
- %>
下面是调用这组分页存储过程的实例
- '#############定义分页存储过程所要使用的变量##################################################
- '1.定义变量,给部分变量设定初始值
- dimiPageIndex,iPageSize,iRowCount
- dimstrWherem,strTableName,SID,strGetField,strWhere,strOrderBy
- iPageSize=12'一页内显示的记录条数
- strTableName="dataTable"'表名
- SID="id"'主键名
- strGetField="id, field1,field2,field3"
- '要显示的字段名
- strWhere="where1=1 and where2=2"
- 'where子句
- strOrderBy="iddesc"'排序
- '2,执行getPageInf()得到(1)iPageIndex:当前页数,(2)iRowCount:总记录数,(3)iPageCount:总页数
- CallgetPageInfo()'include_gb/page.asp
- '3,先定义rsTobj,再执行getDataRS().subgetDataRS()使用上面定义的表明,字段,where,页数,总记录数语句等,去访问存储过程,并把结果付给rsTobj(集合)
- dimrsTobj
- CallgetDataRS()
- '4,rsTobj得到了返回数据,开始循环输出,写到过程里,方便调用
- subshowProducts()
- ifrsTobj.eofThen
- response.Write("暂时没有数据")
- else
- dowhilenotrsTobj.eof
- CallshowProdTable(rsTobj("id"),rsTobj("NewsName"),rsTobj("Pictures"),rsTobj("abstract"),rsTobj("AddTime"))
- rsTobj.moveNext
- loop
- endif
- CloseRS(rsTobj)'关闭链接include_gb/connSiteData.asp
- endsub
- '###############################################################
|
|