.Net public paging query method (c#) + public paging query stored procedure (SqlServer)

1. Stored procedure

CREATE PROCEDURE [dbo].[p_PageList]
@Tables varchar(1000), --table name, please use tA a inner join tB b On a.AID = b.AID for multiple tables
@Sort varchar(200) = '', -- sort field and sort direction, when empty, the default is to sort in reverse order by primary key
@PageNumber int = 1, -- start page number
@PageSize int = 10, -- page size
@Fields varchar(1000) = '*', -- read fields
@Filter varchar(2000) = NULL, --Where condition length is not enough, from 1000 to 2000
@Group varchar(1000) = NULL, -- grouping
@isCount bit = 0, -- whether to get the total number of records
@TotalCounts int = 0 output -- the total number of records queried (wuxl added on 2010.01.14)
AS
DECLARE @strFilter varchar(2000) -- not enough length, changed from 2000 to 2000
declare @sql varchar(max) -- not enough length, from 2000 to max
Declare @strTmp nvarchar(max) -- store the query statement that obtains the total number of query results

-- filter data
SET @strFilter = ' 1 = 1 '
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
 SET @strFilter += @Filter
END

-- get the total number of records
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

-- query all data
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 -- the first page improves performance
	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. The method of calling the stored procedure

    public class PageData
    {
        /// <summary>
        /// New page to get data
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="fieldName"></param>
        /// <param name="pageSize"></param>
        /// <param name="currentPage"></param>
        /// <param name="sortField">sort field and sort direction, such as: SortA DESC;</param>
        /// <param name="condition"></param>
        /// <param name="isCount">Whether to query the total number</param>
        /// <param name="totalCount">The total number of records queried</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("Database connection string");
            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;
        }

  

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324813286&siteId=291194637