存储过程分页,按多条件排序(原创)
cs页面调用代码:
public int TotalPage = 0;
public int PageCurrent = 1;
public int PageSize = 25;
public int RowsCount = 0;
string userid, username;
public DataTable dt = new DataTable();
public string path, userwelcome;
public string opt,cid;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.Params["page"] == null || Request.Params["page"].ToString().Equals(""))
PageCurrent = 1;
else
PageCurrent=int.Parse(Request.Params["page"].ToString());
this.getPage(out TotalPage, out RowsCount, PageSize, PageCurrent);
}
}
//调用存储过程的函数
private void getPage(out int totalPage, out int rowsCount, int pageSize, int currentPage)
{
SqlParameter[] parameters = {
new SqlParameter("@TotalPage", SqlDbType.Int,4),
new SqlParameter("@RowsCount", SqlDbType.Int,4),
new SqlParameter("@PageSize", SqlDbType.Int,4),
new SqlParameter("@CurrentPage", SqlDbType.Int,4),
new SqlParameter("@SelectFields", SqlDbType.NVarChar,700),
new SqlParameter("@IdField",SqlDbType.NVarChar,50),
new SqlParameter("@OrderField", SqlDbType.NVarChar,200),
new SqlParameter("@OrderType", SqlDbType.NVarChar,2),
new SqlParameter("@TableName", SqlDbType.NVarChar,300),
new SqlParameter("@strWhere", SqlDbType.NVarChar,300),
};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Direction = ParameterDirection.Output;
parameters[2].Value = pageSize;
parameters[3].Value = currentPage;
parameters[4].Value = "a.RLId,a.companyName,a.webSite,a.isRL,a.ordernum,a.isrl,a.userid";
parameters[5].Value = "a.RLId";
parameters[6].Value = " a.isrl asc , a.orderNum ";
parameters[7].Value = "1";
parameters[8].Value = "qiYeRenling a";
parameters[9].Value = "1=1";//
DataSet ds = Wm23Abc.DBUtility.DbHelperSQL.RunProcedure("getRecordByPage", parameters, "dt");
dt = ds.Tables[0];
totalPage = int.Parse(parameters[0].Value.ToString());
rowsCount = int.Parse(parameters[1].Value.ToString());
}
.aspx页面代码:
<table id="SXFSTable" style="width:100%;" class="table">
<tr><td><b>公司名称</b></td><td><b>公司网址</b></td><td><b>认领状态</b></td></tr>
<%for (int i = 0; i < dt.Rows.Count; i++)
{
%>
<tr>
<td><%= dt.Rows[i]["companyName"].ToString() %>排序值:<%= dt.Rows[i]["ordernum"].ToString() %></td>
<td><%= dt.Rows[i]["webSite"].ToString() %>
是否认领:<%=dt.Rows [i]["userid"].ToString () %></td>
<td><%= dt.Rows[i]["isRL"].ToString().Equals("0") ? "<a href=\"javascript:;\" οnclick=\"renLing(event,'"+dt.Rows[i]["RLId"].ToString()+"');\">认领该企业</a>" : "<font color=\"red\">该企业已被认领</font>"%></td>
</tr>
<%
}
%>
</table>
</div>
<div style="margin-left:auto; margin-right:auto; width:70%; text-align:left; font-size:9pt;">
第 <%=PageCurrent %> 页 共 <%=RowsCount %> 条 共 <%=TotalPage%> 页
<% if (PageCurrent != 1)
{
%>
<a href="test.aspx">首 页</a>
<a href="test.aspx?page=<%=PageCurrent-1 %>">上一页</a>
<%
}
if (PageCurrent != TotalPage)
{
%>
<a href="test.aspx?page=<%=PageCurrent+1 %>">下一页</a>
<a href="test.aspx?page=<%=TotalPage%>">末 页</a>
<%
}
%>
</div>
存储过程代码:
CREATE proc [dbo].[getRecordByPage]
@TotalPage int output,--总页数
@RowsCount int output,--总条数
@PageSize int,--每页多少数据
@CurrentPage int,--当前页数
@SelectFields nvarchar(1000),--select 语句但是不包含select
@IdField nvarchar(50),--主键列
@OrderField nvarchar(50),--排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件
@OrderType nvarchar(4),--1升序,0降序
@TableName nvarchar(200),--表名
@strWhere nvarchar(300)--条件
As
Begin
declare @RecordCount float
declare @PageNum int --分页依据数
Declare @Compare nvarchar(50)--比较字段区分min或者max
Declare @Compare1 nvarchar(2) --大于号“>” 或者小于号"<“
Declare @OrderSql nvarchar(10)--排序字段
declare @Sql nvarchar(4000)
Declare @TemSql nvarchar(1000)
Declare @nRd int
declare @afterRows int
declare @tempTableName nvarchar(10)
if(@OrderType='1')
Begin
set @OrderSql=' asc'
End
Else
Begin
set @OrderSql= ' desc'
End
if(isnull(@strWhere, '')<>'')
Set @strWhere = @strWhere
if(@strWhere='')
Set @strWhere=' 1=1 '
Set @TemSql='Select @RecordCount=Count(1) from '+@TableName +' where '+@strWhere
exec sp_executesql @TemSql,N'@RecordCount float output',@RecordCount output
Set @RowsCount=@RecordCount
Set @TotalPage= ceiling(@RecordCount/@PageSize)
if(@CurrentPage>@TotalPage)
Set @CurrentPage=@TotalPage
if(@CurrentPage<1)
Set @CurrentPage=1
if(@PageSize<1)
Set @PageSize=1
print(@RecordCount)
if(@CurrentPage=1)
Begin
set Rowcount @PageSize
set @Sql='select '+ @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +'
'+@OrderSql +','+@IdField +' asc'
--print(@Sql)
exec sp_executeSql @Sql
End
else if(@CurrentPage=@TotalPage)
begin
set @afterRows=@RowsCount-(@CurrentPage-1)*@PageSize
set RowCount @afterRows
if(@OrderType='1')
begin
set @OrderField=REPLACE(@OrderField,'asc','lai512343975')//这里用变量将asc和desc互换,哈哈,太神了
set @OrderField=REPLACE(@OrderField,'desc','asc')
set @OrderField=REPLACE(@OrderField,'lai512343975','desc')
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' desc'+','+@IdField +' asc'
end
else
begin
set @OrderField=REPLACE(@OrderField,'desc','lai512343975')
set @OrderField=REPLACE(@OrderField,'asc','desc')
set @OrderField=REPLACE(@OrderField,'lai512343975','asc')
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' asc ' +','+@IdField+ ' asc'
print(@Sql)
end
--print(@Sql)
exec sp_executeSql @Sql
end
else
Begin
set @nRd=@PageSize* (@CurrentPage-1)
print(@nRd)
set RowCount @PageSize
set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' and '+@IdField + ' not in (select top '+ cast(@nRd as nvarchar(10))+' '+@IdField+' from '+@TableName+' where '+ @strWhere+' order by '+@OrderField +' '+@OrderSql+','+@IdField +' asc) ' + ' order by '+ @OrderField + ' ' +@OrderSql+','+@IdField +' asc'
exec sp_executeSql @Sql
--Print(@sql)
End
end
GO
转载于:https://www.cnblogs.com/jxcia_Lai/archive/2010/06/12/1757339.html
存储过程分页,按多条件排序(原创)相关推荐
- mysql通用分页_MySQL海量数据的通用存储过程分页代码
本节主要内容: MySQL海量数据的通用存储过程分页代码 本节为大家分享一例mysql 通用存储过程分页.海量数据分页的代码. 1,测试用的表结构: 复制代码 代码示例: CREATE TABLE I ...
- MS SQLSERVER通用存储过程分页
最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...
- SQL存储过程分页(通用的拼接SQL语句思路实现)
多表通用的SQL存储过程分页 案例一: USE [Community] GO/****** Object: StoredProcedure [dbo].[Common_PageList] Script ...
- silverlight + wcf(json格式) + sqlserver存储过程分页
silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0 ...
- [百万级]通用存储过程.分页存储过程
/* 名称:spAll_ReturnRows 输入: 输出: 调用: EXEC spAll_ReturnRows 'SELECT * FROM 表名', 页号, 返回记录数, '主键', ...
- Redis实现分页和多条件模糊查询方案
导言 Redis是一个高效的内存数据库,它支持包括String.List.Set.SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊 ...
- 常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不穷.今天我把一些常见的存储过程分页列出来,再简单地测一下性能,算是对知识的总结,也是对您好想法的抛钻引玉.废话不多说,开始吧~~ 1.首先建 ...
- sql 存储过程 分页
---存储过程:分页,获得第@endrecord-@num+1条到第@endrecord条记录的研报信息 IF exists (select * from SysObjects where name= ...
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序 怎样遍历一个list 符合下列条件 1. 按照元组的第一个从小到大排序 2. 如果第一个相同 则按照元组第2个从大到小 ...
最新文章
- c语言的标准字符,C语言标准定义的32个关键字
- PHP快速入门教程:WHILE循环示例
- css overflow属性的测试
- for(;;)函数中判断条件执行顺序
- 易于使用的人工智能_通过AI使网络更易于访问
- 软件工程的迷途和沉思
- 测试Word2013发布博客
- word中带圈字符字体显示大小和位置不正常
- 全球首个AI公园亮相北京海淀区
- OpenCV-python安装教程
- python提取发票信息发票识别_分享一个电子发票信息提取工具(Python)
- PAT : 基础编程题目集_函数题答案(6-1 ~ 6-13)(C语言)
- 什么是函数?什么是无参函数?什么是返回值?函数的分类?
- 百度2018营收破千亿,AI成发展主要驱动力
- Weird Rounding
- 程序语言Python Tutorial(一):激发你的欲望 程序语言
- 那一阙词,早已波澜-仓央嘉措
- Linux期末复习考前走一走——何绍华Linux操作系统第3版
- 华为ensp Cloud连接使用及创建环回适配器网卡
- R语言3.12 对应分析