使用公共的存储过程实现repeater的分页
当一个项目repeater分页多的时候使用公共的存储过程实现分页,是不错的选择
ALTER PROC [dbo].[P_Common_proc] -- 通用分页存储过程
@TableName varchar (5000), --表名
@Fields varchar (5000), --字段名 (全部字段为*)
@OrderField varchar (5000), --排序字段( 必须!支持多字段 )
@SqlWhere varchar (5000), --条件语句( 不用加where)
@PageSize int , --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@RecordCount int output --返回总条数
as
begin
Begin Tran --开始事务
Declare @sql nvarchar(4000);
Declare @PageCount int;
--计算总记录数
if (@SqlWhere <>'' AND @sqlWhere IS NOT NULL)
BEGIN
set @sql = 'select @totalRecord = count(*) from ' + @TableName +' where 1=1 ' + @sqlWhere
END
ELSE
set @sql = 'select @totalRecord = count(*) from ' + @TableName
EXEC sp_executesql @sql, N'@totalRecord int OUTPUT',@RecordCount OUTPUT--计算总记录数
PRINT @sql;
--计算总页数
select @PageCount =CEILING(CONVERT(FLOAT,@RecordCount)/CONVERT(FLOAT,@PageSize) );
if (@SqlWhere <>'' AND @sqlWhere IS NOT NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName +' where 1=1 ' + @SqlWhere
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
--处理页数超出范围情况
if @PageIndex <=0
Set @pageIndex = 1
if @pageIndex >@RecordCount
Set @pageIndex = @RecordCount
--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
set @StartRecord = (@pageIndex- 1)*@PageSize
set @EndRecord = @pageIndex* @pageSize
--继续合成sql 语句
set @Sql = @Sql + ') as a where rowId > ' + Convert(varchar (50), @StartRecord) + ' and rowId <=' + Convert(varchar (50), @EndRecord)
EXEC sp_executesql @Sql
PRINT @sql;
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return - 1
End
Else
Begin
Commit Tran
Return @RecordCount ---返回记录总数
End
END
这是一个公共的存储过程的分页,在.net开发中,Dal是这样调用的。。
/// <summary>
/// 查询承运单
/// </summary>
/// <param name="Carriers"></param>
/// <returns></returns>
public List<CarriersModel> GetCarriersList(CarriersModel Carriers, int PageSize, int PageIndex, out int RecordCount)
{
//存储过程名字
string ProcName = "P_Common_proc";
//表名
string TableName = "dbo.Carriers";
//字段
string Fields = "*";
//排序字段
string OrderField = "CarriersID";
//条件
string SqlWhere = "";
SqlParameter[] param =
{
new SqlParameter("@TableName",SqlDbType.VarChar,5000),
new SqlParameter("@Fields",SqlDbType.VarChar,5000),
new SqlParameter("@OrderField",SqlDbType.VarChar,5000),
new SqlParameter("@SqlWhere",SqlDbType.VarChar,5000),
new SqlParameter("@PageSize",SqlDbType.Int),
new SqlParameter("@PageIndex",SqlDbType.Int),
new SqlParameter("@RecordCount",SqlDbType.Int)
};
List<CarriersModel> CarriersList = new List<CarriersModel>();
if (Carriers.CarriersID != 0)
{
SqlWhere += $" and CarriersID={Carriers.CarriersID}";
}
if (!string.IsNullOrWhiteSpace(Carriers.ReceiveLinkman))
{
SqlWhere += $" and ReceiveLinkman like '%{Carriers.ReceiveLinkman}%'";
}
if (!string.IsNullOrWhiteSpace(Carriers.SendLinkman))
{
SqlWhere += $" and SendLinkman like '%{Carriers.SendLinkman}%'";
}
if (!string.IsNullOrWhiteSpace(Carriers.LeaverDate))
{
SqlWhere += $" and LeaverDate>{Carriers.LeaverDate}";
}
if (!string.IsNullOrWhiteSpace(Carriers.LeaverDateEnd))
{
SqlWhere += $" and LeaverDate>{Carriers.LeaverDateEnd}";
}
param[0].Value = TableName;
param[1].Value = Fields;
param[2].Value = OrderField;
param[3].Value = SqlWhere;
param[4].Value = PageSize;
param[5].Value = PageIndex;
param[6].Direction = ParameterDirection.Output;
using (SqlDataReader sdr = DBHelper.ExecuteReaderProc(ProcName, param))
{
if (sdr.HasRows)
{
while (sdr.Read())
{
CarriersModel Carrier = new CarriersModel();
Carrier.CarriersID = Convert.ToInt32(sdr["CarriersID"]);
Carrier.SendLinkman = sdr["SendLinkman"].ToString();
Carrier.SendCompany = sdr["SendCompany"].ToString();
Carrier.ReceiveLinkman = sdr["ReceiveLinkman"].ToString();
Carrier.ReceiveCompany = sdr["ReceiveCompany"].ToString();
Carrier.LeaverDate = sdr["LeaverDate"].ToString();
Carrier.CTotalCost = Convert.ToDouble(sdr["TotalCost"]);
Carrier.FinishedState = Convert.ToInt32(sdr["FinishedState"]);
CarriersList.Add(Carrier);
}
sdr.Close();
}
}
RecordCount = Convert.ToInt32(param[6].Value);
return CarriersList;
}
然后只需要在UI层里面传入
@TableName varchar (5000), --表名
@Fields varchar (5000), --字段名 (全部字段为*)
@OrderField varchar (5000), --排序字段( 必须!支持多字段 )
@SqlWhere varchar (5000), --条件语句( 不用加where)
@PageSize int , --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@RecordCount int output --返回总条数
参数即可。
需要注意的是:在UI层调用的时候
private void BindRptCarrierList()
{
CarriersModel carrier = new CarriersModel();
int cid;
int.TryParse(txtCarrierId.Text, out cid);
carrier.CarriersID = cid;
carrier.LeaverDate = txtLeaverDate.Text;
carrier.LeaverDateEnd = txtLeaverDateEnd.Text;
carrier.ReceiveLinkman = txtReceiveLinkman.Text;
carrier.SendLinkman = txtSendLinkman.Text;
CarriersBLL carrierbll = new CarriersBLL();
int PageSize = AspNetPagerTool.PageSize;
int PageIndex = AspNetPagerTool.CurrentPageIndex;
int RecordCount = 0;//注意接收总页数的返回值
rptCarriersList.DataSource = carrierbll.GetCarriersList(carrier, PageSize, PageIndex, out RecordCount);//out
AspNetPagerTool.RecordCount = RecordCount;
rptCarriersList.DataBind();
}
使用公共的存储过程实现repeater的分页的更多相关文章
- 基于存储过程的MVC开源分页控件
基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...
- SqlServer存储过程应用二:分页查询数据并动态拼接where条件
前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...
- Repeater的分页
Repeater控件是个好东西.轻量级.又好用.完全的自定义.但是,正是因为这些优点它没有自动分页的功能.这个需要研究一下.我看了一下起点等小说网站,那些什么推荐排名榜用Repeater控件那是很 ...
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
- ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页
1.效果图&代码说明 1.效果图 2.代码说明 1.翻页按钮 前台两个LinkButton(上一页.下一页),设置不同的CommandName.CommandArg ...
- jQuery+存储过程实现无刷新分页(九)
涉及到得知识点: 1.分页存储过程 2.分页原理 3.jQuery DOM操作 4.jQuery Ajax存取数据 效果图:
- SQLServer存储过程实现单条件分页
SQLServer Procedure Pagination_basic: ALTER PROCEDURE [qiancheng].[Pagination_basic] ( ), --name of ...
- sqlserver存储过程实现多表分页
if @PageIndex = 1 begin if @strWhere != ’’ set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGet ...
- uniquery 配合 mssql 自带存储过程实现分页
--使用系统存储过程实现的通用分页存储过程 -- 此过程原作者,应该是:邹健老前辈 CREATE PROC sp_PageView @sql ntext, --要执行的sql语句 , --要显示的页码 ...
随机推荐
- Python爬虫《Python网络爬虫相关基础概念》
引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的应用还是从 ...
- linux下查看磁盘分区的文件系统格式
df -T 只可以查看已经挂载的分区和文件系统类型. Filesystem Type 1K-blocks Used Available Use% Mounted on/dev/sda1 ext4 20 ...
- CSS3中的变形与动画(一)
CSS3变形篇 旋转rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中 ...
- 【NLP_Stanford课堂】分词
一.如何定义一个单词 在统计一句话有多少个单词的时候,首要问题是如何定义一个单词,通常有三种情况: 是否认为句中的停顿词比如Uh是一个单词,我们称之为fragment,或者filled pause. ...
- ubuntu 18 下配置 WebStorm 编译 sass
ubuntu 18 下配置 WebStorm 编译 scss 标签(空格分隔): IDE 安装Ruby: sudo apt-get install ruby ruby -v ruby 2.5.1p57 ...
- 再学UML-深入浅出UML类图(三)
类与类之间的关系(2) 2. 依赖关系 依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系. ...
- rac数据库默认sql tuning advisor,导致大量library cache lock
rac数据库默认sql tuning advisor,导致大量library cache lock 问题现象:客户反映周六周日固定十点钟,一个程序会特别慢(大概10分钟),平时1到2秒.查看当时的日志 ...
- 设计模式——外观模式(FacadePattern)
外观模式:为子系统中的一组接口提供一个一致的界面,次模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. UML图: 外观类: package com.cnblog.clarck; /** * ...
- ExtJS4 ajax请求同步异步问题
今天在写代码过程中遇到一个奇怪的问题.事情是这种,我写了一个简单的页面用来删除选中的用户,请看以下: 由于后台的servlet的代码实现了依据用户名来删除一条记录.所以我在前台的ExtJS代码里面用了 ...
- BZOJ2976:[POI2002]出圈游戏(exCRT)
Description 有编号从1到n的n个小朋友在玩一种出圈的游戏,编号为i+1的小朋友站在编号为i小朋友左边.编号为1的小朋友站在编号为n的小朋友左边.首先编号为1的小朋友开始报数,接着站在左边的 ...