C#.NET SQLServer数据库分页函数,包含存储过程和C#代码
-- ============================================= -- Create date: <2012-9-12> -- Description: <高效分页存储过程,适用于Sql2005> -- Notes: <排序字段强烈建议建索引>-- sosoft.cnblogs.com -- ============================================= create Procedure [dbo].[Page] @TableName varchar(50), --表名@Fields varchar(1000) = '*', --字段名(全部字段为*)@OrderField varchar(1000), --排序字段(必须!支持多字段)@sqlWhere varchar(1000) = Null,--条件语句(不用加where)@pageSize int, --每页多少条记录@pageIndex int = 1 , --指定当前为第几页@TotalPage int output --返回总页数 as beginBegin Tran --开始事务Declare @sql nvarchar(4000);Declare @totalRecord int; --计算总记录数if (@SqlWhere='' or @sqlWhere=NULL)set @sql = 'select @totalRecord = count(*) from ' + @TableNameelseset @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhereEXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数 --计算总数量select @TotalPage=@totalRecord--CEILING((@totalRecord+0.0)/@PageSize)+1if (@SqlWhere='' or @sqlWhere=NULL)set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName elseset @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere --处理页数超出范围情况if @PageIndex<=0 Set @pageIndex = 1if @pageIndex>@TotalPageSet @pageIndex = @TotalPage--处理开始点和结束点Declare @StartRecord intDeclare @EndRecord intset @StartRecord = (@pageIndex-1)*@PageSize + 1set @EndRecord = @StartRecord + @pageSize - 1--继续合成sql语句set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)--print @SqlExec(@Sql)-- print @totalRecord If @@Error <> 0BeginRollBack TranReturn -1EndElseBeginCommit Tran--print @totalRecord Return @totalRecord ---返回记录总数End end
下面是C#函数代码
#region 获取分页的数据/// <summary>/// 获取分页的数据/// </summary>/// <param name="TblName">数据表名</param>/// <param name="Fields">要读取的字段</param>/// <param name="OrderField">排序字段</param>/// <param name="SqlWhere">查询条件</param>/// <param name="PageSize">每页显示多少条数据</param>/// <param name="pageIndex">当前页码</param>/// <param name="TotalPage">返回值,共有多少页</param>/// <returns></returns> /// sosoft.cnblogs.compublic static DataSet PageData(string TblName, string Fields, string OrderField, string SqlWhere, int PageSize, int pageIndex, out int TotalPage){TotalPage = 1;DbObject db = new DbObject();string connString = db.ConnectionString;SqlConnection conn = new SqlConnection(connString);SqlCommand comm = new SqlCommand("Page", conn);comm.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100));comm.Parameters[0].Value = TblName;comm.Parameters.Add(new SqlParameter("@Fields", SqlDbType.NVarChar, 1000));comm.Parameters[1].Value = Fields;comm.Parameters.Add(new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000));comm.Parameters[2].Value = OrderField;comm.Parameters.Add(new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000));comm.Parameters[3].Value = SqlWhere;comm.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int));comm.Parameters[4].Value = PageSize;comm.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int));comm.Parameters[5].Value = pageIndex;comm.Parameters.Add(new SqlParameter("@TotalPage", SqlDbType.Int));comm.Parameters[6].Direction = ParameterDirection.Output;comm.CommandType = CommandType.StoredProcedure;SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);DataSet ds = new DataSet();dataAdapter.Fill(ds);TotalPage = (int)comm.Parameters[6].Value; conn.Close();conn.Dispose();comm.Dispose();db.Dispose();return ds;}#endregion
转载于:https://www.cnblogs.com/sosoft/archive/2012/09/12/2682532.html
C#.NET SQLServer数据库分页函数,包含存储过程和C#代码相关推荐
- 数据库中函数和存储过程的区别总结
数据库的使用中,经常用到函数和存储过程.都是为了实现某个sql功能,那么这两者有区别吗?都适用哪些场景?总结如下 总的来说函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少. ...
- mysql 中函数如何转存_mysql 导入导出数据库以及函数、存储过程 【转】
MySQL常用导出数据命令: 1.mysql导出整个数据库 mysqldump -hhostname -uusername -ppassword databasename > backupfil ...
- mysql导出存储过程_mysql 导入导出数据库以及函数、存储过程
一.mysql常用导出数据命令 1.mysql导出整个数据库 mysqldump -hhostname -uusername -ppassword databasename > backupfi ...
- 查询Sqlserver数据库死锁的一个存储过程
使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉.利用sp_who_loc ...
- Oracle、MySql、SQLServer 数据库分页查询语句
(一).** mysql的分页查询** mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句* firs ...
- Sqlserver 数据库分页查询(三种方式)
--第一种分页:sqlserver 2000-sqlserver2005 --假设:每页显示5条, 当前页:1 则查询1-5 --不等于前5条的前5条 select top 5 * from St ...
- cyq.data mysql_CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
在 CYQ.Data 分页是内部集成的功能,针对不同的数据库,使用不同的分页形式. 1:Access:集成:使用3次Top分页 2:MySql:集成,使用LimitN分页 3:Sqlite:集成,使用 ...
- oracle数据库中函数和存储过程中的区别
一.函数必须有返回值,过程没有返回值: 二.函数可以单独执行,过程必须通过execute执行: 三.函数可以嵌入SQL中执行,过程不能. 可以将比较复杂的查询写成函数,然后在过程中调用. 转载于:ht ...
- 干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
01 T-SQL案例整理 已知有一个表:该表的字段有:id,name,date,gradeid,email,表名为table_name,按要求实现下面内容. 1.插入一条记录: insert into ...
最新文章
- 关于Delegate 和 MulticastDelegate的实现
- java异常标记_java异常机制
- 计算机基础在线阅读,TOP16[定稿]计算机基础教案(上下册).doc文档免费在线阅读...
- 定了!百度运维工程师非法挖矿获利 10 万、被判 3 年,如何避免面向监狱编程?...
- mysql主流版本2020_mysql高级2020.7.12-2020.7.13
- 比特币交易的脚本如何执行
- GPS坐标单位(度分秒)的换算方法
- 用C语言显示所有Ascll表
- 队列仿真一个银行叫号系统
- dom影像图形成数字地形图_航测相关知识点——鲲鹏智汇承接航测相关任务
- HealthKit框架简介
- 「实战」南京房价的秘密——准备篇
- c语言输入身高输出标准体重,项目2:就拿胖子说事---(4)计算出标准体重,输出体重状态(正常/超重/超轻)...
- pacman 查询_pacman (简体中文)
- 区块链交易正规平台有哪些?哪个区块链交易平台正规?
- python画图如何调整图例位置_python图例参数
- 什么是SSH 以及常见的ssh 功能
- excel 分组排名 countif
- ES插入date类型数据报错failed to parse field [case_date] of type [date]
- 2021-04-12-椭圆曲线加密
热门文章
- uap连接oracle,UAP环境初始化操作手册Oralce版.pdf
- 相同的树Python解法
- python学习-列表的操作(常用函数均会介绍)
- 解决由于操作顺序问题导致 hbase 一直处于启动无法关闭的问题
- oracle查询并更新数据库,oracle数据库查询和更新
- win8看不到win7局域网计算机名,实现Win7旗舰版与win8.1系统局域网里文件共享的设置方法【图】...
- oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
- 矩阵的二范数_【专题】GAN(二)—— 目标函数的优化
- MySQL内连接方法_Mysql常用的几种join连接方式
- hive把字符串转换为时间_关于hive的时间转换