sqlserver 存储过程分页(按多条件排序)

2022-05-24 0 399

cs页面调用代码:

复制代码 代码如下:

 public int TotalPage = 0;

public int PageCurrent = 1;

public int PageSize = 25;

public int RowsCount = 0;

string userid, username;

public DataTable dt = new DataTable();

public string path, userwelcome;

public string opt,cid;

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

if (Request.Params[“page”] == null || Request.Params[“page”].ToString().Equals(“”))

PageCurrent = 1;

else

PageCurrent=int.Parse(Request.Params[“page”].ToString());

this.getPage(out TotalPage, out RowsCount, PageSize, PageCurrent);

}

}

//调用存储过程的函数

private void getPage(out int totalPage, out int rowsCount, int pageSize, int currentPage)

{

SqlParameter[] parameters = {

new SqlParameter(“@TotalPage”, SqlDbType.Int,4),

new SqlParameter(“@RowsCount”, SqlDbType.Int,4),

new SqlParameter(“@PageSize”, SqlDbType.Int,4),

new SqlParameter(“@CurrentPage”, SqlDbType.Int,4),

new SqlParameter(“@SelectFields”, SqlDbType.NVarChar,700),

new SqlParameter(“@IdField”,SqlDbType.NVarChar,50),

new SqlParameter(“@OrderField”, SqlDbType.NVarChar,200),

new SqlParameter(“@OrderType”, SqlDbType.NVarChar,2),

new SqlParameter(“@TableName”, SqlDbType.NVarChar,300),

new SqlParameter(“@strWhere”, SqlDbType.NVarChar,300),

};

parameters[0].Direction = ParameterDirection.Output;

parameters[1].Direction = ParameterDirection.Output;

parameters[2].Value = pageSize;

parameters[3].Value = currentPage;

parameters[4].Value = “a.RLId,a.companyName,a.webSite,a.isRL,a.ordernum,a.isrl,a.userid”;

parameters[5].Value = “a.RLId”;

parameters[6].Value = ” a.isrl asc , a.orderNum “;

parameters[7].Value = “1”;

parameters[8].Value = “qiYeRenling a”;

parameters[9].Value = “1=1”;//

DataSet ds = Wm23Abc.DBUtility.DbHelperSQL.RunProcedure(“getRecordByPage”, parameters, “dt”);

dt = ds.Tables[0];

totalPage = int.Parse(parameters[0].Value.ToString());

rowsCount = int.Parse(parameters[1].Value.ToString());

}

.aspx页面代码:

<table id=”SXFSTable” style=”width:100%;” class=”table”>

<tr><td><b>公司名称</b></td><td><b>公司网址</b></td><td><b>认领状态</b></td></tr>

<%for (int i = 0; i < dt.Rows.Count; i++)

{

%>

<tr>

<td><%= dt.Rows[i][“companyName”].ToString() %>排序值:<%= dt.Rows[i][“ordernum”].ToString() %></td>

<td><%= dt.Rows[i][“webSite”].ToString() %>

是否认领:<%=dt.Rows [i][“userid”].ToString () %></td>

<td><%= dt.Rows[i][“isRL”].ToString().Equals(“0”) ? “<a href=\”javascript:;\” onclick=\”renLing(event,'”+dt.Rows[i][“RLId”].ToString()+”‘);\”>认领该企业</a>” : “<font color=\”red\”>该企业已被认领</font>”%></td>

</tr>

<%

}

%>

</table>

</div>

<div style=”margin-left:auto; margin-right:auto; width:70%; text-align:left; font-size:9pt;”>

第 <%=PageCurrent %> 页 共 <%=RowsCount %> 条 共 <%=TotalPage%> 页

<% if (PageCurrent != 1)

{

%>

<a href=”test.aspx”>首 页</a>

<a href=”test.aspx?page=<%=PageCurrent-1%20%>”>上一页</a>

<%

}

if (PageCurrent != TotalPage)

{

%>

<a href=”test.aspx?page=<%=PageCurrent+1%20%>”>下一页</a>

<a href=”test.aspx?page=<%=TotalPage%>”>末 页</a>

<%

}

%>

</div>

存储过程代码:


复制代码 代码如下:

CREATE proc [dbo].[getRecordByPage]

@TotalPage int output,–总页数

@RowsCount int output,–总条数

@PageSize int,–每页多少数据

@CurrentPage int,–当前页数

@SelectFields nvarchar(1000),–select 语句但是不包含select

@IdField nvarchar(50),–主键列

@OrderField nvarchar(50),–排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件

@OrderType nvarchar(4),–1升序,0降序

@TableName nvarchar(200),–表名

@strWhere nvarchar(300)–条件

As

Begin

declare @RecordCount float

declare @PageNum int –分页依据数

Declare @Compare nvarchar(50)–比较字段区分min或者max

Declare @Compare1 nvarchar(2) –大于号“>” 或者小于号”<“

Declare @OrderSql nvarchar(10)–排序字段

declare @Sql nvarchar(4000)

Declare @TemSql nvarchar(1000)

Declare @nRd int

declare @afterRows int

declare @tempTableName nvarchar(10)

if(@OrderType=’1′)

Begin

set @OrderSql=’ asc’

End

Else

Begin

set @OrderSql= ‘ desc’

End

if(isnull(@strWhere, ”)<>”)

Set @strWhere = @strWhere

if(@strWhere=”)

Set @strWhere=’ 1=1 ‘

Set @TemSql=’Select @RecordCount=Count(1) from ‘+@TableName +’ where ‘+@strWhere

exec sp_executesql @TemSql,N’@RecordCount float output’,@RecordCount output

Set @RowsCount=@RecordCount

Set @TotalPage= ceiling(@RecordCount/@PageSize)

if(@CurrentPage>@TotalPage)

Set @CurrentPage=@TotalPage

if(@CurrentPage<1)

Set @CurrentPage=1

if(@PageSize<1)

Set @PageSize=1

print(@RecordCount)

if(@CurrentPage=1)

Begin

set Rowcount @PageSize

set @Sql=’select ‘+ @SelectFields +’ from ‘+ @TableName +’ where ‘ +@strWhere+’ order by ‘+@OrderField +’

‘+@OrderSql +’,’+@IdField +’ asc’

–print(@Sql)

exec sp_executeSql @Sql

End

else if(@CurrentPage=@TotalPage)

begin

set @afterRows=@RowsCount-(@CurrentPage-1)*@PageSize

set RowCount @afterRows

if(@OrderType=’1′)

begin

set @OrderField=REPLACE(@OrderField,’asc’,’lai512343975′)//这里用变量将asc和desc互换,哈哈,太神了

set @OrderField=REPLACE(@OrderField,’desc’,’asc’)

set @OrderField=REPLACE(@OrderField,’lai512343975′,’desc’)

set @Sql=’select ‘ + @SelectFields +’ from ‘+ @TableName +’ where ‘ +@strWhere+’ order by ‘+@OrderField +’ desc’+’,’+@IdField +’ asc’

end

else

begin

set @OrderField=REPLACE(@OrderField,’desc’,’lai512343975′)

set @OrderField=REPLACE(@OrderField,’asc’,’desc’)

set @OrderField=REPLACE(@OrderField,’lai512343975′,’asc’)

set @Sql=’select ‘ + @SelectFields +’ from ‘+ @TableName +’ where ‘ +@strWhere+’ order by ‘+@OrderField +’ asc ‘ +’,’+@IdField+ ‘ asc’

print(@Sql)

end

–print(@Sql)

exec sp_executeSql @Sql

end

else

Begin

set @nRd=@PageSize* (@CurrentPage-1)

print(@nRd)

set RowCount @PageSize

set @Sql=’select ‘ + @SelectFields +’ from ‘+ @TableName +’ where ‘ +@strWhere+’ and ‘+@IdField + ‘ not in (select top ‘+ cast(@nRd as nvarchar(10))+’ ‘+@IdField+’ from ‘+@TableName+’ where ‘+ @strWhere+’ order by ‘+@OrderField +’ ‘+@OrderSql+’,’+@IdField +’ asc) ‘ + ‘ order by ‘+ @OrderField + ‘ ‘ +@OrderSql+’,’+@IdField +’ asc’

exec sp_executeSql @Sql

–Print(@sql)

End

end

GO

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 MsSql sqlserver 存储过程分页(按多条件排序) https://www.niceym.com/60064.html