文档章节

.net 公用的分页查询方法(c#)+公用的分页查询存储过程(SqlServer)

o
 osc_x4h57ch8
发布于 2018/04/24 09:48
字数 625
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1.存储过程

    数据库函数exec()执行sql字符串有“sql注入风险”,不推荐使用!

CREATE PROCEDURE [dbo].[p_PageList]
@Tables varchar(1000),				--表名,多表是请使用 tA a inner join tB b On a.AID = b.AID
@Sort varchar(200) = '',			--排序字段和排序方向
@PageNumber int = 1,				--开始页码
@PageSize int = 10,					--页码尺寸
@Fields varchar(1000) = '*',		--读取字段
@Filter varchar(2000) = NULL,		--Where条件 长度不够,从1000变为2000
@isCount bit = 0,					--是否获得总记录数
@TotalCounts    int = 0 output      --查询到的总记录数
AS
DECLARE @strFilter varchar(2000)     --长度不够,从2000变为2000
declare @sql varchar(max)            --长度不够,从2000变为max
Declare @strTmp nvarchar(max)        --存放取得查询结果总数的查询语句

-- 过滤数据
SET @strFilter = ' 1 = 1 '
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
 SET @strFilter += @Filter 
END

--获得总记录条数
if @isCount = 1						
begin
	set @strTmp = 'SELECT @TotalCounts= Count(1) FROM '+ @Tables + ' where ' + @strFilter
	exec sp_executesql @strTmp,N'@TotalCounts int out ',@TotalCounts out  
end

--查询所有数据
IF @PageNumber < 1
	SET @PageNumber = 1
if @PageSize = 0
begin	
	if @Sort = ''
	begin
		set @sql = 'select ' + @Fields + ' from ' + @Tables + ' WHERE  ' + @strFilter 
	end
	else
	begin
		set @sql = 'select ' + @Fields + ' from ' + @Tables + ' WHERE  ' + @strFilter + ' ORDER BY  '+ @Sort	
	end	
end
else
begin
	if @PageNumber = 1				--第一页提高性能
	begin 
		if @Sort = ''
		begin
			set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' WHERE ' + @strFilter
		end
		else
		begin
			set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' WHERE ' + @strFilter + ' ORDER BY  '+ @Sort
		end
	end 
	else
	begin
		DECLARE @START_ID varchar(50)
		DECLARE @END_ID varchar(50)
		SET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)
		SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
		if @Sort = ''
		begin
			set @sql =  ' SELECT * FROM ( ' + 
				' SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS rownum, ' + @Fields + 
				' FROM ' + @Tables + 
				' WHERE ' + @strFilter + 
			') AS D WHERE rownum BETWEEN ' + @START_ID + ' AND ' + @END_ID
		end
		else
		begin
			set @sql =  ' SELECT * FROM ( ' + 
				' SELECT ROW_NUMBER() OVER(ORDER BY ' + @Sort + ') AS rownum, ' + @Fields + 
				' FROM ' + @Tables + 
				' WHERE ' + @strFilter + 
			') AS D WHERE rownum BETWEEN ' + @START_ID + ' AND ' + @END_ID
		end
	END
END

PRINT @sql
EXEC(@sql)

GO

2.调用存储过程的方法

public class PageData
    {
        /// <summary>
        /// 新的分页获取数据
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="fieldName"></param>
        /// <param name="pageSize"></param>
        /// <param name="currentPage"></param>
        /// <param name="sortField">排序字段和排序方向,如:SortA DESC;</param>
        /// <param name="condition"></param>
        /// <param name="isCount">是否查询总数</param>
        /// <param name="totalCount">查询到的总记录数</param>  
        /// <returns></returns>
        public static DataSet GetDataByPage(
            string tableName,
            string fieldName,
            int pageSize,
            int currentPage,
            string sortField,
            string condition,
            bool isCount,
            out int totalCount
            )
        {
            SqlConnection CONN = new SqlConnection("数据库连接字符串");
            SqlDataAdapter SDA = new SqlDataAdapter("p_PageList",CONN);
            SDA.SelectCommand.CommandType = CommandType.StoredProcedure;
            SDA.SelectCommand.CommandTimeout = 30000;

            SDA.SelectCommand.Parameters.Add("@Tables", SqlDbType.VarChar,1000).Value = tableName;
            SDA.SelectCommand.Parameters.Add("@Sort", SqlDbType.VarChar,200).Value = sortField;
            SDA.SelectCommand.Parameters.Add("@PageNumber", SqlDbType.Int).Value = currentPage  ;
            SDA.SelectCommand.Parameters.Add("@PageSize", SqlDbType.Int).Value =  pageSize;
            SDA.SelectCommand.Parameters.Add("@Fields", SqlDbType.VarChar,1000).Value =   fieldName;
            SDA.SelectCommand.Parameters.Add("@Filter", SqlDbType.VarChar, 2000).Value = condition;     
            SDA.SelectCommand.Parameters.Add("@Group", SqlDbType.VarChar,1000).Value = null;
            SDA.SelectCommand.Parameters.Add("@isCount", SqlDbType.Bit).Value = isCount;
            SDA.SelectCommand.Parameters.Add("@TotalCounts", SqlDbType.Int).Direction = ParameterDirection.Output;

            DataSet ds = new DataSet();
            if (CONN.State == ConnectionState.Closed)
	        {
		         CONN.Open();
	        }
            SDA.Fill(ds);
            if (CONN.State == ConnectionState.Open)
	        {
		         CONN.Close();
	        }

            try
            {
                totalCount =int.Parse(SDA.SelectCommand.Parameters["@TotalCounts"].Value.ToString());
            }
            catch
            {
                totalCount = 0;
            }
            return ds;
        }

  

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

深入浅出Zabbix 3.0 -- 第二章 Zabbix Web操作与定义

第二章 Zabbix Web操作与定义 本章介绍Zabbix 中一些基本概念的定义和web前端页面的操作,包括Zabbix中使用的一些术语的定义,Web页面中用户管理、主机和主机组的管理,以及监控项、模板、触...

osc_5zaxkz1e
18分钟前
14
0
深入浅出Zabbix 3.0 -- 第一章 Zabbix 安装与配置

第一章 Zabbix 安装与配置 1.1 Zabbix 介绍 Zabbix是一个企业级的开源监控软件,可以监控IT基础架构的可用性和应用的性能,为用户提供集中管理、分布式监控的一站式(all in one)监控解决方...

osc_nvkeo9cj
19分钟前
10
0
PHP 实现抽奖逻辑

public static function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 forea......

chenhongjiang
19分钟前
18
0
struts2 上传 下载

东方部落: http://11144439.blog.51cto.com struts中上传文件功能小测试。这里jar是 2.5 版本。 项目结构图 废话不多说,直接代码。 2. web.xml配置 <?xml version="1.0" encoding="UTF-8......

osc_1qix3fyb
21分钟前
31
0
SVN管理系统安装及其操作

SVN管理系统安装及操作 防伪码:学习永远不晚! 前言: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上...

osc_afifi2qt
22分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部