使用公共的存储过程实现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语句 , --要显示的页码 ...
随机推荐
- 03_Redis数据类型(List)
[List类型] Redis采用的是LinkedList. ArrayList: 数组存储.查询快,增删慢. LinkedList:链表存储.增删快,查询慢,查询两端快. Redis的list内部采用 ...
- 由AlphaGO引发的思考
这几天AlphaGO的人机大战炒得热火朝天,给谷歌的AI做了一次大大的广告,可谓风头出尽,大有AI战胜一切的“趋势”.而且,像阿法狗.阿法猫之类的新词不断,成了饭前茶后人们议论的热点.作为一个留学过日 ...
- 转:什么是4D(DRG、DLG、DOM、DEM)数据?
ps:摘抄地址http://blog.163.com/wangqing_rs/blog/static/16451519120111026102916472/ 什么是4D(DRG.DLG.DOM.DE ...
- jquery控制滚动条
$(function () { $("table tr td a").css('white-space', 'nowrap'); $("div[id$=ctlScroll ...
- LeAndroid招聘汇总
招聘Android通讯开发经理 工作地点:北京-朝阳区 工作经验:3-5年 薪资范围:¥ 面议 学历要求:本科以上 职责描述1.负责设计指导开发和优化Android网络通讯相关功能:2.负责设计指导开 ...
- 好记性不如烂笔头-nginx安装环境与Linux安装ftp组件
Nginx安装环境 1. Nginx安装环境 Nginx是C语言开发,建议在linux上运行,我参加工作这些年来一直使用Linux发行版之一的 Centos作为安装环境. 1.1 gcc 安装Ngin ...
- 移动端调试工具weinre
前段时间在大豹公众号上看到一个关于移动端调试的工具,了解了一下,确实不错. npm install -g weinre 先全局安装,然后使用的时候通过如下命令启动 weinre --boundHost ...
- 【java开发系列】—— 深克隆和浅克隆
Java支持我们对一个对象进行克隆,通常用在装饰模式和原型模式中.那么什么是深克隆,什么是浅克隆呢. [浅克隆],通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的. [深克隆],克隆的时候 ...
- spring-4.3.16+xfire-spring-1.2.6版本升级
最近爆了个spring的漏洞,然后公司整体要求升级spring到最新版本,然后搞四了一大批猿人. spring-4.*的最新版本是4.3.16(稳定版) xfire-spring-1.2.6(最新版- ...
- Asp.net网站优化【转】
阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...