您的位置:首页 > 编程语言 > ASP

Asp.net 高性能数据分页函数,调用示例

2009-03-13 16:58 519 查看
-- =============================================
-- Create date: <2006-11-05>
-- Description: <高效分页存储过程,仅适用于Sql2005>
-- Notes: <排序字段强烈建议建索引>
-- =============================================
create Procedure [dbo].[Page]
@TableName varchar(50), --表名
@Fields varchar(1000) = *, --字段名(全部字段为*)
@OrderField varchar(1000), --排序字段(必须!支持多字段)
@sqlWhere varchar(1000) = Null,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@TotalPage int output --返回总页数
as
begin

Begin Tran --开始事务

Declare @sql nvarchar(4000);
Declare @totalRecord int;

--计算总记录数

if (@SqlWhere= or @sqlWhere=NULL)
set @sql = select @totalRecord = count(*) from + @TableName
else
set @sql = select @totalRecord = count(*) from + @TableName + where + @sqlWhere

EXEC sp_executesql @sql,N@totalRecord int OUTPUT,@totalRecord OUTPUT--计算总记录数

--计算总数量
select @TotalPage=@totalRecord--CEILING((@totalRecord+0.0)/@PageSize)+1

if (@SqlWhere= or @sqlWhere=NULL)
set @sql = Select * FROM (select ROW_NUMBER() Over(order by + @OrderField + ) as rowId, + @Fields + from + @TableName
else
set @sql = Select * FROM (select ROW_NUMBER() Over(order by + @OrderField + ) as rowId, + @Fields + from + @TableName + where + @SqlWhere


--处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1

if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage

--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int

set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1

--继续合成sql语句
set @Sql = @Sql + ) as + @TableName + where rowId between + Convert(varchar(50),@StartRecord) + and + Convert(varchar(50),@EndRecord)
--print @Sql
Exec(@Sql)

-- print @totalRecord
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
--print @totalRecord
Return @totalRecord ---返回记录总数


End

end

asp.net分页函数


#region 获取分页的数据
/// <summary>
/// 获取分页的数据
/// </summary>
/// <param name="TblName">数据表名</param>
/// <param name="Fields">要读取的字段</param>
/// <param name="OrderField">排序字段</param>
/// <param name="SqlWhere">查询条件</param>
/// <param name="PageSize">每页显示多少条数据</param>
/// <param name="pageIndex">当前页码</param>
/// <param name="TotalPage">返回值,共有多少页</param>
/// <returns></returns>

public static DataSet PageData(string TblName, string Fields, string OrderField, string SqlWhere, int PageSize, int pageIndex, out int TotalPage)
{

TotalPage = 1;
DbObject db = new DbObject();

string connString = db.ConnectionString;

SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand("Page", conn);

comm.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100));
comm.Parameters[0].Value = TblName;

comm.Parameters.Add(new SqlParameter("@Fields", SqlDbType.NVarChar, 1000));
comm.Parameters[1].Value = Fields;

comm.Parameters.Add(new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000));
comm.Parameters[2].Value = OrderField;

comm.Parameters.Add(new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000));
comm.Parameters[3].Value = SqlWhere;

comm.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int));
comm.Parameters[4].Value = PageSize;

comm.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int));
comm.Parameters[5].Value = pageIndex;

comm.Parameters.Add(new SqlParameter("@TotalPage", SqlDbType.Int));
comm.Parameters[6].Direction = ParameterDirection.Output;

comm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
TotalPage = (int)comm.Parameters[6].Value;

conn.Close();
conn.Dispose();
comm.Dispose();
db.Dispose();
return ds;
}
#endregion



分页代码显示


#region 分页代码显示
/// <summary>
/// 分页代码显示
/// </summary>
/// <param name="Url">跳转地址</param>
/// <param name="TotleNum">总数据量</param>
/// <param name="NumPerPage">每页显示多少条</param>
/// <param name="Thepage"></param>
/// <param name="ShowJump">是否显示跳转按钮</param>
/// <param name="pagestyle">显示风格</param>
/// <returns></returns>
public static string PageStr(string Url, int TotleNum, int NumPerPage, int Thepage, bool ShowJump, int pagestyle)
{
string strTemp;
int n;
int p;
int ii;
if (Convert.ToInt32(TotleNum) <= Convert.ToInt32(NumPerPage))
return "";
Url = Url.Trim();
if (Url != "")
Url += "&";

if (Convert.ToInt32(TotleNum) % Convert.ToInt32(NumPerPage) == 0)
{
n = TotleNum / NumPerPage;
}
else
{
n = TotleNum / NumPerPage + 1;
}
strTemp = "<table align=center width=/"100%/"><tr><td align=/"center/">";

strTemp += "共 " + TotleNum + " 条记录 页次:" + Thepage + "/" + n + "页 ";
strTemp += NumPerPage + "条/页 ";

if (Convert.ToInt32(pagestyle) == 1)
{
if (Convert.ToInt32(Thepage) < 2)
strTemp += "<font color=/"#999999/">首页 上页</font> ";
else
{
strTemp += "<a href=?" + Url + "page=1 class=/"link/">首页</a> ";
strTemp += "<a href=?" + Url + "page=" + (Thepage - 1) + " class=/"link/">上页</a> "; ;
}
if (n - Convert.ToInt32(Thepage) < 1)
{
strTemp += "<font color=/"#999999/">下页 尾页</font> ";
}
else
{
strTemp += "<a href=?" + Url + "page=" + (Thepage + 1) + " class=/"link/">下页</a> ";
strTemp += "<a href=?" + Url + "page=" + n + " class=/"link/">尾页</a> ";
}
}
if (Convert.ToInt32(pagestyle) == 2)
{
if (Convert.ToInt32(Thepage) - 1 % 10 == 0)
p = (Thepage - 1) / 10;
else
p = (Thepage - 1) / 10;

if (p * 10 > 0)
strTemp += "<a href=?" + Url + "page=" + p * 10 + " title=上十页 >[<<]</a> ";
int uming_i = 1;
for (ii = p * 10 + 1; ii <= p * 10 + 10; ii++)
{
if (ii == Thepage)
strTemp += "<strong><font color=#ff0000>[" + ii + "]</font></strong> ";
else
strTemp += "<a href=?" + Url + "page=" + ii + ">[" + ii + "]</a> ";
if (ii == n)
break;
uming_i = uming_i + 1;
}
if (ii <= n && uming_i == 11)
strTemp += "<a href=?" + Url + "page=" + ii + " title=下十页>[>>]</a> ";
}

if (ShowJump)
{
string guid = CreateCard(Guid.NewGuid().ToString());
strTemp += "  <script>function " + guid + "_a(){var " + guid + "_b=document.getElementById(/"" + guid + "_i/").value;var url=?"+ Url +"&page=+ "+ guid +"_b +;this.location.href=+ url +;}</script>转到:<input type=/"text/" name=/"" + guid + "_i/" id=/"" + guid + "_i/" style=/"width:20px;height:15px;/" /> 页  <input name=/"pagebutton/" type=/"button/" value=/"跳转/" onclick=/"return " + guid + "_a();/" />";
}
strTemp += "</td></tr></table>";
return (string)strTemp;
}
#endregion



#region 显示页面输入框
/// <summary>
/// 显示页面输入框
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static string CreateCard(string str)
{
string card = str;
for (int i = 0; i <= 9; i++)
{
card = card.Replace(i.ToString(), "").Replace("-", "").ToUpper();

}

return card;

}
#endregion

分页调用示例





#region 分页
string TblName = tbl;
string Fields = "id,gxmc,zymc,wc,fs,pc,bwlqrs,bzylqrs,bzyzgf,zgfwc,bzyzdf,zdfwc,pjf,cs,xnwc,pro";//读取的字段
string OrderField = " fs desc";//排序
string SqlWhere = "";//条件
if (!string.IsNullOrEmpty(pc))
{
SqlWhere = " pc in(" + pc + ")";
}

int PageSize = 20; //分页大小
int totalpage = 0;
int pageIndex;
string _page = "1";
_page = Convert.ToString(Request.QueryString["page"]);
if (string.IsNullOrEmpty(_page))
{
_page = "1";
}
else
{
_page = Fun.FilterSQL(_page);
}
if (_page == "0")
{
_page = "1";
}
pageIndex = Convert.ToInt32(_page);
string pagestr= "";
DataSet ds = GetPage.PageData(TblName, Fields, OrderField, SqlWhere, PageSize, pageIndex, out totalpage, conn2);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string TR = " onmouseover=/"this.style.background=#FFF9E8;/" onmouseout=/"this.style.background=#FFFFFF;/"";

if (i % 2 == 0)
{

TR = " class=/"alter/" onmouseover=/"this.style.background=#FFF9E8;/" onmouseout=/"this.style.background=#EBF3FD;/"";
}

pagestr += "<tr " + TR + "><td> <input name=/"id/" value=/"" + ds.Tables[0].Rows[i]["id"].ToString() + "/" type=/"checkbox/" /></td><td> " + ds.Tables[0].Rows[i]["gxmc"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["zymc"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["fs"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["wc"].ToString() + "</td><td class=/"gray/" align=/"center/">" + setxnwc(ds.Tables[0].Rows[i]["xnwc"].ToString(), ds.Tables[0].Rows[i]["wc"].ToString(), ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td> " + setpc(ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td> " + ds.Tables[0].Rows[i]["bwlqrs"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["bzylqrs"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["bzyzgf"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["zgfwc"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["bzyzdf"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["zdfwc"].ToString() + "</td><td>" + ds.Tables[0].Rows[i]["pjf"].ToString() + "</td>" + GetTblName(tbl, "<td> " + ds.Tables[0].Rows[i]["pro"].ToString() + "</td><td> " + ds.Tables[0].Rows[i]["cs"].ToString() + "</td>") + "<td><a href=/"#/" onclick=/"Confirm1(真的要修改吗?,wj_add.aspx,id=" + ds.Tables[0].Rows[i]["id"].ToString() + ");return false;/">修改</a></td><td><a href=/"#/" onclick=/"Confirm(真的要删除吗?,id=" + ds.Tables[0].Rows[i]["id"].ToString() + "&act=del);return false;/">删除</a></td></tr>";
}
ds.Clear();
ds.Dispose();
Page_list.Text = pagestr; //绑定分页数据

this.PageStr.Text = GetPage.PageStr("tbl=" + tbl + "&title=" + title + "&subtitle=" + subtitle + "&pc=" + pc, totalpage, PageSize, pageIndex, true, 2);//绑定分页导航
#endregion



http://www.opent.cn/a/2009/2/4/831.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: