Sql通用分頁儲存過程

2021-08-25 08:41:46 字數 3623 閱讀 9296

這個是乙個基於framework平台,c#語言與sql建立分頁儲存過程

1.使用dbhelpersql幫助類

2,ado連線資料庫

3,通用儲存過程

create proc [dbo].[p_paging]

@tablename varchar(8000), --表名、檢視名

@pagesize int = 10, --頁面顯示條數

@pageindex int = 0, --當前頁

@ordercol varchar(100) = 'id desc',--排序 (如:id)

@where varchar(max) = '', --條件

@columns varchar(500) = '*' --要顯示的列

asdeclare @sql varchar(max) --定義字串

declare @sql2 varchar(max)

declare @where2 varchar(max) --定義按條件查詢的字串

if @where <> '' --如果條件不為空

begin

select @where2 = ' and ' + @where

select @where = ' where ' + @where

endelse

select @where2 = '' --如果條件為空 執行where2中傳遞過來的引數

select @sql = 'select top ' + convert(varchar(10),@pagesize) + ' ' + @columns + ' from ' + @tablename --查詢前幾條,切查詢的列表及查詢的表

select @sql2 = @sql + @where --新增條件

select @sql = @sql + ' where ' + '(' + @indexcol + ' not in (select top ' + convert(varchar(10), @pagesize * @pageindex) + ' ' + @indexcol + ' from ' + @tablename + @where + ' order by '+ @ordercol +'))'

select @sql = @sql + @where2

select @sql = @sql + ' order by ' + @ordercol

--獲取資料集

exec (@sql)

select @sql2 = replace(@sql2,'top ' + convert(varchar(10), @pagesize) + ' ' + @columns, 'count(1)')

--獲取總資料條數

exec(@sql2)

model中的輸入類

public class pageparams

///

public string indexcol

/// /// 每頁多少條資料

///

public int pagesize

/// /// 當前頁索引

///

public int pageindex

/// /// 排序 (如:id desc)

///

public string ordercol

/// /// 條件(要查詢的條件)

///

public string where

/// /// 要顯示的列(要顯示那些列資料)

///

public string columns

}

輸出類

public class pageswhere t:class    //t為動態的型別

/// /// 資料總頁數

///

public int sumpage

/// /// 資料集合

///

public listlist

以上三段**為通用分頁的核心, 接下來的**乙個人為標準,總的來說就是為字段賦值,傳參,獲取結果

定義靜態字段,

efbll bll = new efbll();

static int size = 3; //分頁尺寸

static int index = 1; //當前頁面

static int tcount = 0; //總計數

static int tpage = 0; //總頁數

static string where = ""; //條件

public actionresult index()

//t為動態型別,自行更改

private listshowbinds()

where = where;

pageparams page = new pageparams()

;pages s = bll.showlistall(page);

tcount = s.sumcount;

tpage = s.sumpage;

viewbag.tcount = tcount;

viewbag.sumpage = tpage;

viewbag.pageindex = index;

return s.list;

}

接下來是資料訪問層

public pages showlistall(pageparams p)

;dataset set= dbhelpersql.executedataset(dbhelpersql.connb2c, "p_paging", paras);

pages page = new pages();

datatable dt = set.tables[0];

page.sumcount = convert.toint32(set.tables[1].rows[0][0]);

page.sumpage = page.sumcount / p.pagesize + (page.sumcount % p.pagesize > 0 ? 1 : 0);

page.list = jsonconvert.deserializeobject>(jsonconvert.serializeobject(dt));

return page;

}

前台html

@*pagination分頁,pagination-large 大小,pagination-centered 居中*@

共 @(viewbag.sumpage) 頁,當前為第 @(viewbag.pageindex) 頁

這個sql分頁通用**是無論什麼專案都可以用來使用,很方便,很多東西直接用來賦值貼上即可,例如 儲存過程**,已經 輸入類及輸出類, 以及前台的 分頁**

SQL 分頁通用儲存過程

這是乙個通用的分頁儲存過程,利用的是sql的系統游標 這種效率並不是很好 create proc sp pageview sql ntext,要執行的sql語句 pagecurrent int 1,pagesize int 10,pagecount int output asset nocount ...

通用儲存過程 分頁儲存過程

名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序字段 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...

SQL查詢通用儲存過程(可分頁)

以前參考過網上朋友 是誰忘了,知道的說一聲 寫的,但感覺有點不適合我的要求。修改大部分後如下所示。getrecordpagetotal為分頁時取得頁總數。當然可以寫在getrecordbypage裡,但個人認為那樣的話,在只取頁總數的情況下也要使用getrecordbypage,查詢效率不太好,就分...