2022-10-23 313
数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。本文结合ASP.NET,详细给出了两种ASP.NET海量分页数据存储的技术。
存储过程1
CREATEPROCEDUREpagination @tblNamevarchar(255),--表名 @strGetFieldsvarchar(1000)='*',--需要返回的列 @fldNamevarchar(255)='',--排序的字段名 @PageSizeint,--页尺寸 @PageIndexint,--页码 @doCountbit,--返回记录总数,非0值则返回 @OrderTypebit,--设置排序类型,非0值则降序 @strWherevarchar(1500)=''--查询条件(注意:不要加where) AS declare@strSQLvarchar(5000)--主语句 declare@strTmpvarchar(110)--临时变量 declare@strOrdervarchar(400)--排序类型 if@doCount!=0 begin if@strWhere!='' set@strSQL="selectcount(*)asTotalfrom["+@tblName+"]where"+@strWhere else set@strSQL="selectcount(*)asTotalfrom["+@tblName+"]" end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 else begin if@OrderType!=0 begin set@strTmp="<(selectmin" set@strOrder="orderby["+@fldName+"]desc" --如果@OrderType不是0,就执行降序,这句很重要! end else begin set@strTmp=">(selectmax" set@strOrder="orderby["+@fldName+"]asc" end if@PageIndex=1 begin if@strWhere!='' set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["+@tblName+"]where"+@strWhere+""+@strOrder else set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from["+@tblName+"]"+@strOrder --如果是第一页就执行以上代码,这样会加快执行速度 end else begin --以下代码赋予了@strSQL以真正执行的SQL代码 set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from[" +@tblName+"]where["+@fldName+"]"+@strTmp+"(["+@fldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"["+@fldName+"]from["+@tblName+"]"+@strOrder+")astblTmp)"+@strOrder if@strWhere!='' set@strSQL="selecttop"+str(@PageSize)+""+@strGetFields+"from[" +@tblName+"]where["+@fldName+"]"+@strTmp+"([" +@fldName+"])from(selecttop"+str((@PageIndex-1)*@PageSize)+"[" +@fldName+"]from["+@tblName+"]where"+@strWhere+"" +@strOrder+")astblTmp)and"+@strWhere+""+@strOrder end end exec(@strSQL) GO 调用的程序(为了通用性,我写了一个方法,大家可以提意见,也可以对其进行修改,多多交换意见,共同进步) privatestaticDataSetGetCustomersData(stringtblName,stringstrGetFields,stringfldName,intPageSize,intPageIndex,intdoCount,intOrderType,stringstrWhere) { stringconnString=ConfigurationSettings.AppSettings["connstr"]; SqlConnectionconn=newSqlConnection(connString); SqlCommandcomm=newSqlCommand("pagination3",conn); comm.Parameters.Add(newSqlParameter("@tblName",SqlDbType.VarChar));//表名 comm.Parameters[0].Value=tblName; comm.Parameters.Add(newSqlParameter("@strGetFields",SqlDbType.VarChar));//返回的列 comm.Parameters[1].Value=strGetFields; comm.Parameters.Add(newSqlParameter("@fldName",SqlDbType.VarChar));//排序的字段名 comm.Parameters[2].Value=fldName; comm.Parameters.Add(newSqlParameter("@PageSize",SqlDbType.Int));//页尺寸 comm.Parameters[3].Value=PageSize; comm.Parameters.Add(newSqlParameter("@PageIndex",SqlDbType.Int));//页码 comm.Parameters[4].Value=PageIndex; comm.Parameters.Add(newSqlParameter("@doCount",SqlDbType.Int));//是否返回记录总数,0为不返回,1为返回 comm.Parameters[5].Value=doCount; comm.Parameters.Add(newSqlParameter("@OrderType",SqlDbType.Int));//设置排序类型,0为升序,非0为降序 comm.Parameters[6].Value=OrderType; comm.Parameters.Add(newSqlParameter("@strWhere",SqlDbType.VarChar));//where语句 comm.Parameters[7].Value=strWhere; comm.CommandType=CommandType.StoredProcedure; SqlDataAdapterdataAdapter=newSqlDataAdapter(comm); DataSetds=newDataSet(); dataAdapter.Fill(ds); returnds; }
存储过程2
CREATEPROCEDURE[dbo].[GetRecordFromPage] @SelectListVARCHAR(2000),--欲选择字段列表 @TableSourceVARCHAR(100),--表名或视图表 @SearchConditionVARCHAR(2000),--查询条件 @OrderExpressionVARCHAR(1000),--排序表达式 @PageIndexINT=1,--页号,从0开始 @PageSizeINT=10--页尺寸 AS BEGIN IF@SelectListISNULLORLTRIM(RTRIM(@SelectList))='' BEGIN SET@SelectList='*' END PRINT@SelectList SET@SearchCondition=ISNULL(@SearchCondition,'') SET@SearchCondition=LTRIM(RTRIM(@SearchCondition)) IF@SearchCondition<>'' BEGIN IFUPPER(SUBSTRING(@SearchCondition,1,5))<>'WHERE' BEGIN SET@SearchCondition='WHERE'+@SearchCondition END END PRINT@SearchCondition SET@OrderExpression=ISNULL(@OrderExpression,'') SET@OrderExpression=LTRIM(RTRIM(@OrderExpression)) IF@OrderExpression<>'' BEGIN IFUPPER(SUBSTRING(@OrderExpression,1,5))<>'WHERE' BEGIN SET@OrderExpression='ORDERBY'+@OrderExpression END END PRINT@OrderExpression IF@PageIndexISNULLOR@PageIndex<1 BEGIN SET@PageIndex=1 END PRINT@PageIndex IF@PageSizeISNULLOR@PageSize<1 BEGIN SET@PageSize=10 END PRINT@PageSize DECLARE@SqlQueryVARCHAR(4000) SET@SqlQuery='SELECT'+@SelectList+',RowNumber FROM (SELECT'+@SelectList+',ROW_NUMBER()OVER('+@OrderExpression+')ASRowNumber FROM'+@TableSource+''+@SearchCondition+')ASRowNumberTableSource WHERERowNumberBETWEEN'+CAST(((@PageIndex-1)*@PageSize+1)ASVARCHAR) +'AND'+ CAST((@PageIndex*@PageSize)ASVARCHAR) --ORDERBY'+@OrderExpression PRINT@SqlQuery SETNOCOUNTON EXECUTE(@SqlQuery) SETNOCOUNTOFF RETURN@@RowCount END
原文链接:https://77isp.com/post/7043.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2023-01-07
网站技术 2022-11-26
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
小游客游戏攻略网游戏攻略网 2024年07月26日
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
扫码二维码
获取最新动态