分页存储过程 + C#后台代码

ALTER proc [dbo].[p_page](
@tableName varchar(8000),--必须
@selectFields varchar(8000)=‘*‘,
@andWhere varchar(4000),--不带where ,只写条件如 and 1=1
@orderByFields varchar(100),--必须 row_number() over(order by)用
@pageIndex int=1,
@pageSize int=20,
@totalCount int=0 output,
@orderType varchar(5)=‘asc‘,--desc,asc
@sql nvarchar(4000) output--返回当前执行的sql语句
)as
begin
if @selectFields=‘‘ or @selectFields is null set @selectFields=‘*‘;
if @pageIndex<=0 set @pageIndex=1;
if @pageSize<=1 set @pageSize=1;

set @sql= N‘select @totalCount=count(*) from ‘+ @tableName +‘ where 1=1 ‘+ @andWhere;
EXEC sp_executesql @sql,N‘@totalCount int OUTPUT‘,@totalCount OUTPUT ;

set @sql=N‘select * from (select row_number() over(order by ‘[email protected]+‘ ‘[email protected]+‘) rowNumerId,‘[email protected]+
‘ from ‘[email protected]+‘ where 1=1 ‘[email protected]+‘) T where rowNumerId>‘+convert(nvarchar(10),(@pageIndex-1)*@pageSize)+‘ and rowNumerId<=‘+convert(nvarchar(10),@pageIndex*@pageSize);
exec (@sql);
end

public static DataTable GetPagedData(string tableName, string selectFields, string andWhere, string orderByFields, int pageIndex, int pageSize, out int totalRows, string orderByType, out string getSelectSql)
{
DataTable dt = new DataTable();
totalRows = 0;
getSelectSql = string.Empty;
try
{
if (string.IsNullOrEmpty(tableName) || string.IsNullOrEmpty(orderByFields))
{
return dt;
}
pageIndex = pageIndex > 0 ? pageIndex : 1;
pageSize = pageSize > 0 ? pageSize : 1;
orderByType = ((orderByType.ToLower().Trim() == "asc") || (orderByType.ToLower().Trim() == "desc")) ? orderByType : "asc";
selectFields = string.IsNullOrEmpty(selectFields) ? "*" : selectFields;
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlDataAdapter da = new SqlDataAdapter("p_page", conn))
{
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@tableName", tableName);
da.SelectCommand.Parameters.AddWithValue("@orderByFields", orderByFields);
da.SelectCommand.Parameters.AddWithValue("@selectFields", selectFields);
da.SelectCommand.Parameters.AddWithValue("@andWhere", andWhere);
da.SelectCommand.Parameters.AddWithValue("@pageIndex", pageIndex);
da.SelectCommand.Parameters.AddWithValue("@pageSize", pageSize);
da.SelectCommand.Parameters.AddWithValue("@totalCount", totalRows).Direction = ParameterDirection.Output;
da.SelectCommand.Parameters.AddWithValue("@orderType", orderByType);
//da.SelectCommand.Parameters.AddWithValue("@distinct", useDistinct ? 1 : 0);
da.SelectCommand.Parameters.Add("@sql", SqlDbType.NVarChar, 4000).Direction = ParameterDirection.Output;
da.Fill(dt);
getSelectSql = da.SelectCommand.Parameters["@sql"].Value.ToString();
totalRows = (int)da.SelectCommand.Parameters["@totalCount"].Value;
}

}
}
catch (System.Data.SqlClient.SqlException e)
{
ESHD.Command.LsgLog.AddError(e, tableName + "selectFields");
}
return dt;
}

时间: 2024-10-10 04:35:53

分页存储过程 + C#后台代码的相关文章

[转]关于SQL分页存储过程的分析

[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

真正通用的SQL分页存储过程

关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加了索引,以方便大数据量的使用(代码中是先抓到临时表的,从性能上说如果采用自增长式的ID表,当然可以不使用临时表以达到性能的提升).以下代码的SP是经过我们项目使用通过的.因朋友问及此问题,我就放在这里供大家分享,如各位大侠有更好的方法,也请告诉我.在这里先感谢各位了. 1 CREATE PROCED

分页存储过程

精确查询:         CREATE PROCEDURE FindCosInfo (     @CosID varchar (10),         //课程编号     @CosName  varchar (20),   //课程名称     @CosCredit  int                     //课程学分 ) AS declare @sql varchar (1000) begin   set @sql='select * from tb_Course '   if

EasyUI中datagrid实现显示、增加、 删除、 修改、 查询操作(后台代码C#)

2datagrid加载数据.代码如下所示 一.数据的显示 1新建HtmlPage2.html页面,引入相关文件.如下所示 <script src="easyui/js/jquery-1.8.2.min.js"></script>  <script src="easyui/js/jquery.easyui.min.js"></script>  <link href="easyui/css/themes/d

SQL 可搜索 可排序 可分页存储过程 适用于sql 2008以上

-- ============================================= -- Author: 蜘蛛王 -- Create date: 2015-10-29 -- Description: 可搜索 可排序 可分页存储过程 适用于sql2008以上 -- (非常重要,请认真使用) -- ============================================= create PROCEDURE dbo.list ( @table varchar(1000),

关于SQL分页存储过程的分析

建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存 中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的 不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长