首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个ASP与存储过程分页有关问题

2012-01-23 
在线等一个ASP与存储过程分页问题存储过程代码如下:CREATEPROCEDUREhaocai_product_searchpage(@strTblNam

在线等一个ASP与存储过程分页问题
存储过程代码如下:
CREATE   PROCEDURE   haocai_product_searchpage
(  
@strTblNameVARCHAR(8000),--表名或视图表  
@strFieldsVARCHAR(8000)=   '* ',--欲选择字段列表  
@strOrdFieldVARCHAR(100),--排序字段  
@strOrdField2VARCHAR(100),--排序字段   2
@strKeyFieldVARCHAR(100),--主键  
@intPageNoINT=   0,--页号,从0开始  
@intPageSizeINT=   10,--页尺寸  
@strWhereVARCHAR(4000)=   ' ',--条件
@bitOrdTypeBIT=   1--排序,1=降序,0=升序
)  
AS  
SET   NOCOUNT   ON
DECLARE   @strSQL   VARCHAR(8000)  

IF   @intPageNo   =   0
BEGIN
SET   @strSQL=   'SELECT   TOP   '   +   CAST(@intPageSize   AS   VARCHAR)   +   '   '   +   @strFields   +   '   FROM   '   +   @strTblName
IF   @strWhere   !=   ' '
SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere
IF   @bitOrdType   =   1
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   DESC '
ELSE
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   ASC '
END
ELSE
BEGIN
SET   @strSQL=   'DECLARE   @intCurPageNo   int; '
SET   @strSQL=   @strSQL   +   'DECLARE   @intNextPageNo   int; '
SET   @strSQL=   @strSQL   +   'SET   @intCurPageNo   =   '   +   CAST(@intPageNo   AS   VARCHAR)   +   '* '   +   CAST(@intPageSize   AS   VARCHAR)   +   '; '  
SET   @strSQL=   @strSQL   +   'SET   @intNextPageNo   =   '   +   CAST(@intPageNo+1   AS   VARCHAR)   +   '* '   +   CAST(@intPageSize   AS   VARCHAR)   +   '; '  
SET   @strSQL=   @strSQL   +   'DECLARE   @strSQL   VARCHAR(8000); '
IF   @bitOrdType   =   1
BEGIN
SET   @strSQL=   @strSQL   +   'SET   @strSQL   =   ' 'SELECT   '   +   @strFields   +   '   FROM   (SELECT   TOP   4   *   FROM   '   +   @strTblName
IF   @strWhere   !=   ' '
SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   DESC)   AS   atmp   WHERE   '   +   @strKeyField
+   '   NOT   IN   (SELECT   TOP   2   '   +   @strKeyField   +   '   FROM   '   +   @strTblName
IF   @strWhere   !=   ' '
SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   DESC)   ORDER   BY   '   +   @strOrdField2   +   '   DESC ' '; '
END


ELSE
BEGIN
SET   @strSQL=   @strSQL   +   'SET   @strSQL   =   ' 'SELECT   '   +   @strFields   +   '   FROM   (SELECT   TOP   ' '   +   CAST(@intNextPageNo   AS   VARCHAR)   +   ' '   *   FROM   '   +   @strTblName  
IF   @strWhere   !=   ' '
SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   ASC   )   AS   atmp   WHERE   '   +   @strKeyField
+   '   NOT   IN   (SELECT   TOP   ' '   +   CAST(@intCurPageNo   AS   VARCHAR)   +   ' '   '   +   @strKeyField   +   '   FROM   '   +   @strTblName
IF   @strWhere   !=   ' '
SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere
SET   @strSQL=   @strSQL   +   '   ORDER   BY   '   +   @strOrdField   +   '   ASC)   ORDER   BY   '   +   @strOrdField2   +   '   ASC ' '; '
END
SET   @strSQL=@strSQL   +   'EXECUTE(@strSQL); '
END
print   @strSQL
EXECUTE(@strSQL)

--SET   @strSQL=   'SELECT   COUNT(*)   FROM   '   +   @strTblName
--IF   @strWhere   !=   ' '
--SET   @strSQL=   @strSQL   +   '   WHERE   '   +   @strWhere


--EXECUTE(@strSQL)
SET   NOCOUNT   OFF
GO

asp代码如下:
<%
keywords   =   saferequest(request.querystring( "keywords "))
Pd_No   =   CInt(Saferequest(Request.querystring( "Page ")))
'@strTblNameVARCHAR(100),--表名或视图表  
'@strFieldsVARCHAR(4000)=   '* ',--欲选择字段列表  
'@strOrdFieldVARCHAR(100),--排序字段  
'@strKeyFieldVARCHAR(100),--主键  
'@intPageNoINT=   0,--页号,从0开始  
'@intPageSizeINT=   10,--页尺寸  
'@strWhereVARCHAR(4000)=   ' ',--条件
'@bitOrdTypeBIT=   1--排序,1=降序,0=升序

Set   oCommand=   CreateObject( "ADODB.Command ")
With   oCommand
.CommandText   =   "searchpage "
.CommandType   =   4
sTblName   =   "dbo.Hc_List   "
sFldList   =   "ProductChinese,Product_Brand_English,Product_name_name "
sOrdField   =   "dbo.Hc_List.Intime "
sOrdField2   =   "Pd_Intime "
sKeyField   =   keywords
IpageNo   =   Pd_No
IpageSize   =   2
strKeyField   =   "Code "
swhere   =   "dbo.Hc_brand.Chinese   like   '% "&Replace(sKeyField, "+ ", " ")& "% ' "
.Parameters.Append   .CreateParameter( "@strTblName ",   200,   1,   4000,   sTblName)
.Parameters.Append   .CreateParameter( "@strFields ",   200,   1,   4000,   sFldList)
.Parameters.Append   .CreateParameter( "@strOrdField ",   200,   1,   100,   sOrdField)


.Parameters.Append   .CreateParameter( "@strOrdField2 ",   200,   1,   100,   sOrdField2)
.Parameters.Append   .CreateParameter( "@strKeyField ",   200,   1,   100,   strKeyField)
.Parameters.Append   .CreateParameter( "@intPageNo ",   3,   1,   4,   iPageNo-1)
.Parameters.Append   .CreateParameter( "@intPageSize ",   3,   1,   4,   iPageSize)
.Parameters.Append   .CreateParameter( "@strWhere ",   200,   1,   4000,   sWhere)
.Parameters.Append   .CreateParameter( "@bitOrdType ",   16,   1,   1,   iOrderType)
%>
asp代码略写了!
问题1:分页第1页无错误   第2页就出现错误   print   @strSQL打印出来的   SQL语句完全可以在视图下正确执行   可就是在页面上出错
问题2:想用建立rs对象   但rs.movefirst不能用   不能移动记录集。
请各位指点下   那里有错误   多谢   问题解决马上给分   谢谢各位



[解决办法]
rs。open conn,1,3用游标打开

热点排行
Bad Request.