当一个项目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的分页的更多相关文章

  1. 基于存储过程的MVC开源分页控件

    基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...

  2. SqlServer存储过程应用二:分页查询数据并动态拼接where条件

    前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...

  3. Repeater的分页

      Repeater控件是个好东西.轻量级.又好用.完全的自定义.但是,正是因为这些优点它没有自动分页的功能.这个需要研究一下.我看了一下起点等小说网站,那些什么推荐排名榜用Repeater控件那是很 ...

  4. 基于存储过程的MVC开源分页控件--LYB.NET.SPPager

    摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...

  5. ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页

    1.效果图&代码说明   1.效果图     2.代码说明 1.翻页按钮         前台两个LinkButton(上一页.下一页),设置不同的CommandName.CommandArg ...

  6. jQuery+存储过程实现无刷新分页(九)

    涉及到得知识点: 1.分页存储过程 2.分页原理 3.jQuery DOM操作 4.jQuery Ajax存取数据   效果图:

  7. SQLServer存储过程实现单条件分页

    SQLServer Procedure Pagination_basic: ALTER PROCEDURE [qiancheng].[Pagination_basic] ( ), --name of ...

  8. sqlserver存储过程实现多表分页

    if @PageIndex = 1 begin if @strWhere != ’’ set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGet ...

  9. uniquery 配合 mssql 自带存储过程实现分页

    --使用系统存储过程实现的通用分页存储过程 -- 此过程原作者,应该是:邹健老前辈 CREATE PROC sp_PageView @sql ntext, --要执行的sql语句 , --要显示的页码 ...

随机推荐

  1. String字符串操作

    char chars[] ={'a','b','c'}; String s = new String(chars); int len = s.length();//字符串长度 System.out.p ...

  2. 用户选择wordpress程序建站需要知道的一些事情 - 安全、优化速度、配置

    WordPress是我们使用最多的CMS程序之一,无论是我们的个人博客,还是企业网站,甚至中小型站点,我们都可以用WP程序部署.我们看到海外网站的时候,大部分都是用的WORDPRESS程序.在我们国人 ...

  3. 开通cnblogs博客

    开通博客,准备记录学习和开发过程

  4. PHP 运用rsa加密和解密实例

    1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...

  5. Siebel 集成中的“发布-订阅”与“阅读”

    将 Siebel 应用程序中存储的数据提供给企业中的其他应用程序时,通常需要遵循以下两种基本模式之一: 发布-订阅 阅读 “发布-订阅”是一种机制,根据该机制,一个系统(发布者)将更改或更新的数据提供 ...

  6. Excel数据导入Sql Server,部分数字为Null

    在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电 话号码”)的数据,在导入SQLServer过程中,会发 ...

  7. jetbrain rider 逐渐完美了,微软要哭了么?

    2019-03-24 10:08:42 多年的vsiual studio使用经验,各种小瑕疵:到现在的visual studio是越来越大了:简直到了无法忍受境地: 每次重装系统都要重新安装下,这个不 ...

  8. Windows快捷操作技巧

    隐藏技能 在当前路径打开命令行 shift + 右键点击文件夹内的空白处,你会看到右键弹出菜单多了个选项 "在此处打开命令窗口",省去了打开命令行再cd到当前路径的麻烦. 快捷键 ...

  9. python 用cookie模拟登陆网站

    import re import requests def get_info(url): headers = { "Cookie" :"***************** ...

  10. LA 4043 最优匹配

    题目链接:https://vjudge.net/contest/161820#problem/A 题意: n 个 白点,n 个黑点,给出了坐标,求完美匹配后,各点不相交,输出白点对于的黑点编号:(输出 ...