您好,欢迎访问一九零五行业门户网

目前用到的两个分页存储过程代码

前用到的两个分页存储过程,需要的朋友可以参考下。
第一个,取得数据总行数
代码如下:
set ansi_nulls on
set quoted_identifier on
go
alter procedure [sq8reyoung].[fenye_num]
(
@tablenames nvarchar(200),
@filter nvarchar(200))
as
if @filter = ''
set @filter = ' where 1=1'
else
set @filter = ' where ' + @filter
execute('select count(*) from '+@tablenames+' '+@filter)
第二个取得分页数据
代码如下:
set ansi_nulls on
set quoted_identifier on
go
alter procedure [sq8reyoung].[fenye]
@tablenames varchar(200), --表名,可以是多个表,但不能用别名
@primarykey varchar(100), --主键,可以为空,但@order为空时该值不能为空
@fields varchar(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@pagesize int, --每页记录数
@currentpage int, --当前页,0表示第1页
@filter varchar(200) = '', --条件,可以为空,不用填 where
@group varchar(200) = '', --分组依据,可以为空,不用填 group by
@order varchar(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by
as
begin
declare @sortcolumn varchar(200)
declare @operator char(2)
declare @sorttable varchar(200)
declare @sortname varchar(200)
if @fields = ''
set @fields = '*'
if @filter = ''
set @filter = 'where 1=1'
else
set @filter = 'where ' + @filter
if @group ''
set @group = 'group by ' + @group
if @order ''
begin
declare @pos1 int, @pos2 int
set @order = replace(replace(@order, ' asc', ' asc'), ' desc', ' desc')
if charindex(' desc', @order) > 0
if charindex(' asc', @order) > 0
begin
if charindex(' desc', @order) set @operator = 'else
set @operator = '>='
end
else
set @operator = 'else
set @operator = '>='
set @sortcolumn = replace(replace(replace(@order, ' asc', ''), ' desc', ''), ' ', '')
set @pos1 = charindex(',', @sortcolumn)
if @pos1 > 0
set @sortcolumn = substring(@sortcolumn, 1, @pos1-1)
set @pos2 = charindex('.', @sortcolumn)
if @pos2 > 0
begin
set @sorttable = substring(@sortcolumn, 1, @pos2-1)
if @pos1 > 0
set @sortname = substring(@sortcolumn, @pos2+1, @pos1-@pos2-1)
else
set @sortname = substring(@sortcolumn, @pos2+1, len(@sortcolumn)-@pos2)
end
else
begin
set @sorttable = @tablenames
set @sortname = @sortcolumn
end
end
else
begin
set @sortcolumn = @primarykey
set @sorttable = @tablenames
set @sortname = @sortcolumn
set @order = @sortcolumn
set @operator = '>='
end
declare @type varchar(50)
declare @prec int
select @type=t.name, @prec=c.prec
from sysobjects o
join syscolumns c on o.id=c.id
join systypes t on c.xusertype=t.xusertype
where o.name = @sorttable and c.name = @sortname
if charindex('char', @type) > 0
set @type = @type + '(' + cast(@prec as varchar) + ')'
declare @toprows int
set @toprows = @pagesize * @currentpage + 1
print @type
declare @sql nvarchar(4000)
set @sql = 'declare @sortcolumnbegin ' + @type + '
set rowcount ' + cast(@toprows as varchar(10))+ ' select @sortcolumnbegin=' +
@sortcolumn + ' from ' + @tablenames + ' ' + @filter + ' ' + @group + ' order by ' + @order + '
set rowcount ' + cast(@pagesize as varchar(10)) + '
select ' + @fields + ' from ' + @tablenames + ' ' + @filter + ' and ' + @sortcolumn + '' + @operator + '@sortcolumnbegin ' + isnull(@group,'') + ' order by ' + @order + ''
-- print(@sql)
exec(@sql)
end
以及实现此方法的数据操作类
代码如下:
using system;
using system.collections.generic;
using system.text;
using system.data.sqlclient ;
using system.data;
using system.configuration;
using wuqi.webdiyer;
using models;
namespace dal
{
public class dbhelper
{
public static readonly string conn_string = configurationmanager.connectionstrings[rymedicalconnectionstring].connectionstring;
public static sqldatareader getreader(string safesql)
{
sqlconnection conn = new sqlconnection(conn_string);
sqlcommand cmd = new sqlcommand(safesql, conn);
sqldatareader reader = cmd.executereader(commandbehavior.closeconnection);
reader.close();
return reader;
}
public static sqldatareader getreader(string sql, params sqlparameter[] values)
{
sqlconnection conn = new sqlconnection(conn_string);
sqlcommand cmd = new sqlcommand(sql, conn);
conn.open();
cmd.parameters.addrange(values);
sqldatareader reader = cmd.executereader(commandbehavior.closeconnection);
reader.close();
conn.close();
return reader;
}
public static datatable getdataset(string safesql)
{
sqlconnection conn = new sqlconnection(conn_string);
dataset ds = new dataset();
sqlcommand cmd = new sqlcommand(safesql, conn);
conn.open();
sqldataadapter da = new sqldataadapter(cmd);
da.fill(ds);
conn.close();
return ds.tables[0];
}
public static datatable getdataset(commandtype cmdtype, string cmdtext, params sqlparameter[] cmdparms)
{
sqlconnection conn = new sqlconnection(conn_string);
dataset ds = new dataset();
sqlcommand cmd = new sqlcommand(cmdtext, conn);
conn.open();
preparecommand(cmd, conn, null, cmdtype, cmdtext, cmdparms);
sqldataadapter da = new sqldataadapter(cmd);
da.fill(ds);
conn.close();
return ds.tables[0];
}
public static sqldatareader executereader(commandtype cmdtype, string cmdtext, params sqlparameter[] cmdparms)
{
sqlcommand cmd = new sqlcommand();
sqlconnection conn = new sqlconnection(conn_string);
conn.open();
preparecommand(cmd, conn, null, cmdtype, cmdtext, cmdparms);
sqldatareader rdr = cmd.executereader(commandbehavior.closeconnection);
cmd.parameters.clear();
rdr.close();
conn.close();
return rdr;
}
public static object executescalar(commandtype cmdtype, string cmdtext, params sqlparameter[] cmdparms)
{
sqlcommand cmd = new sqlcommand();
using (sqlconnection conn = new sqlconnection(conn_string))
{
conn.open();
preparecommand(cmd, conn, null, cmdtype, cmdtext, cmdparms);
object val = cmd.executescalar();
cmd.parameters.clear();
conn.close();
return val;
}
}
public static object executescalar(sqlconnection conn, commandtype cmdtype, string cmdtext, params sqlparameter[] cmdparms)
{
sqlcommand cmd = new sqlcommand();
preparecommand(cmd, conn, null, cmdtype, cmdtext, cmdparms);
object val = cmd.executescalar();
cmd.parameters.clear();
return val;
}
private static void preparecommand(sqlcommand cmd, sqlconnection conn, sqltransaction trans, commandtype cmdtype, string cmdtext, sqlparameter[] cmdparms)
{
if (conn.state != connectionstate.open)
conn.open();
cmd.connection = conn;
cmd.commandtext = cmdtext;
if (trans != null)
cmd.transaction = trans;
cmd.commandtype = cmdtype;
if (cmdparms != null)
{
foreach (sqlparameter parm in cmdparms)
cmd.parameters.add(parm);
}
}
public static void executenonquery(string sql)
{
sqlconnection conn = new sqlconnection(conn_string);
sqlcommand cmd = new sqlcommand(sql,conn);
conn.open();
cmd.executenonquery();
conn.close();
}
///
/// 传入sql语句,返回int
///
///
///
public static int excutecommand(string sql)
{
sqlconnection conn = new sqlconnection(conn_string);
sqlcommand cmd = new sqlcommand(sql, conn);
conn.open();
int result = cmd.executenonquery();
conn.close();
return result;
}
///
///
///
/// 需要分页的表明
/// 主键名
/// 需要取出的字段,留空则为*
/// 每页的记录数
/// 当前页
/// 条件,可以为空,不用填 where
/// 分组依据,可以为空,不用填 group by
/// 排序,可以为空,为空默认按主键升序排列,不用填 order by
///
public static datatable pagedlist(string name, string pk, string fields, int pagesize, int currentpage, string filter, string group, string order)
{
currentpage = currentpage - 1;
datatable dt = getdataset(commandtype.storedprocedure, fenye,
new sqlparameter(@tablenames, name),
new sqlparameter(@primarykey, pk),
new sqlparameter(@fields, fields),
new sqlparameter(@pagesize, pagesize),
new sqlparameter(@currentpage, currentpage),
new sqlparameter(@filter, filter),
new sqlparameter(@group, group),
new sqlparameter(@order, order)
);
return dt;
}
public static int fenye_num(string name, string filter)
{
return (int)executescalar(commandtype.storedprocedure, fenye_num,
new sqlparameter(@tablenames, name),
new sqlparameter(@filter, filter));
}
///
///
///
/// 需要分页的表明
/// 主键名
/// 需要取出的字段,留空则为*
/// 每页的记录数
/// 当前页
/// 条件,可以为空,不用填 where
/// 分组依据,可以为空,不用填 group by
/// 排序,可以为空,为空默认按主键升序排列,不用填 order by
/// 传递aspnetpager控件
///
public static datatable paged(string name, string pk, string fields, int pagesize, int currentpage, string filter, string group, string order, aspnetpager objanp)
{
currentpage = currentpage - 1;
datatable dt = getdataset(commandtype.storedprocedure, fenye,
new sqlparameter(@tablenames, name),
new sqlparameter(@primarykey, pk),
new sqlparameter(@fields, fields),
new sqlparameter(@pagesize, pagesize),
new sqlparameter(@currentpage, currentpage),
new sqlparameter(@filter, filter),
new sqlparameter(@group, group),
new sqlparameter(@order, order)
);
objanp.recordcount = fenye_num(name, filter);
return dt;
}
}
}
以及页面调用方式
代码如下:
using system;
using system.collections;
using system.configuration;
using system.data;
using system.linq;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.htmlcontrols;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.xml.linq;
using insus.net;
using dal;
using system.data.sqlclient;
public partial class news_newlist : system.web.ui.page
{
int nid;
int totalorders;
protected void page_load(object sender, eventargs e)
{
if (!ispostback)
{
if (request.querystring[typeid] != null)
{
nid = convert.toint16(request.querystring[typeid].tostring());
binddata(1);
}
else
{
response.redirect(~/default.aspx);
}
}
}
private void binddata(int page)
{
datatable dt = dbhelper.paged(m_newinfoall, new_id, , aspnetpager1.pagesize, page, new_typeid= + nid.tostring() + , , new_pubdate desc, aspnetpager1);
this.repeater1.datasource = dt;
this.repeater1.databind();
datarow dr = dt.rows[0];
this.label1.text = dr[new_typename].tostring();
//this.literal1.text = dr[new_typename].tostring();
page.title = label1.text.trim() + - 新农合医药网;
}
protected void aspnetpager1_pagechanged(object sender, eventargs e)
{
if (request.querystring[page] != null)
{
binddata(convert.toint32(request.querystring[page].tostring()));
}
}
}
如此分页即可实现(下图),在任何项目中只需要copy2个存储过程一个数据操作类,或者喜欢将数据类做成dll也可以,在页面调用时传入参数只需一行代码即可.
其它类似信息

推荐信息