实现分页.net

 =============== SQL 中的存储过程 ====================
CREATE procedure splitPage
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as pageCount,@rowcount as recCount,@currentpage as curPage
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
GO

=============== Delphi 中应用存储过程 ===================
var myDataSet: _Recordset;
begin
ADODataSet1.Close ;
ADOStoredProc1.Close;
ADOStoredProc1.Parameters.ParamByName('@sqlstr').Value :='select * from History49'; //SQL
ADOStoredProc1.Parameters.ParamByName('@currentpage').Value := 2; //取得第2页
ADOStoredProc1.Parameters.ParamByName('@pagesize').Value := 20; //每页行数
ADOStoredProc1.ExecProc;
ADOStoredProc1.Open;

// 第 一个记录集
myDataSet := lhgDM.asProcLS.NextRecordset(0);
if myDataSet = nil then exit;

// 第 2 个记录集 (页数 ,记录数信息)
myDataSet := lhgDM.asProcLS.NextRecordset(1);
if myDataSet = nil then exit;
ADODataSet1.Recordset := myDataSet ;
ADODataSet1.First ;
pageCount := ADODataSet1.FieldByName('pageCount').AsInteger; // 总页数
recCount := ADODataSet1.FieldByName('recCount').AsInteger; //总记录数

// 第 3 个记录集 当前SQL请求第N页的记录
myDataSet := lhgDM.asProcLS.NextRecordset(2);
if myDataSet = nil then exit;
ADODataSet1.Recordset := myDataSet ;
ADODataSet1.first;
while not ADODataSet1.EOF do begin
...
end;
end;

=============== .NET(c#) 中应用存储过程 ===================
public DataView createDataViewWithPage(string strSQL,string dsName,int currentPage,
int pageRows,ref int pageCount,ref int RowCount)
{
if (currentPage<=0) return null;
if (SQLConn==null) SQLConn = setConn(SQLConnStr);
if (SQLConn==null) return null;

SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = "splitPage" ; //存储过程名称
myCmd.CommandType = CommandType.StoredProcedure ;
myCmd.Parameters.Add("@sqlstr", SqlDbType.VarChar,4000).Value = strSQL;
myCmd.Parameters.Add("@currentpage", SqlDbType.Int).Value = currentPage;
myCmd.Parameters.Add("@pagesize", SqlDbType.Int).Value = pageRows;
myCmd.Connection = SQLConn;

SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = myCmd;
DataSet ds = new DataSet();
sqlDA.Fill(ds,dsName);

pageCount = Convert.ToInt32(ds.Tables[1].DefaultView[0]["pageCount"].ToString()); //总有页数
RowCount = Convert.ToInt32(ds.Tables[1].DefaultView[0]["recCount"].ToString()); //总记录数
//curPage = Convert.ToInt32(ds.Tables[1].DefaultView[0]["curPage"].ToString()); //当前页

return ds.Tables[2].DefaultView;// ds.Tables[dsName].DefaultView ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET实现分页功能可以通过以下步骤实现: 1. 在后端代码获取数据总数和每页显示的记录数。 2. 根据获取到的数据总数和每页显示的记录数计算出总页数。 3. 根据当前页码和每页显示的记录数获取要显示的数据。 4. 将获取到的数据绑定到前端控件上进行显示。 5. 在前端页面添加分页控件,并设置当前页、总页数、每页显示的记录数等属性。 6. 添加事件处理程序,根据用户的操作重新获取数据并进行显示。 以下是一个使用ASP.NET Web Forms实现分页功能的示例代码: 后端代码: ```c# protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } private void BindData() { int currentPage = 1;//当前页码 int pageSize = 10;//每页显示的记录数 string sql = "select count(*) from Products";//获取数据总数的SQL语句 int totalCount = Convert.ToInt32(DbHelperSQL.GetSingle(sql));//获取数据总数 int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);//计算总页数 if (!string.IsNullOrEmpty(Request.QueryString["page"])) { currentPage = Convert.ToInt32(Request.QueryString["page"]);//获取当前页码 } int startIndex = (currentPage - 1) * pageSize + 1;//计算要显示的数据的起始位置 int endIndex = currentPage * pageSize;//计算要显示的数据的结束位置 sql = "select * from (select row_number() over (order by ProductID) as RowNumber, * from Products) as Temp where Temp.RowNumber between " + startIndex + " and " + endIndex;//获取要显示的数据的SQL语句 DataTable dt = DbHelperSQL.Query(sql).Tables[0];//获取要显示的数据 rptProducts.DataSource = dt;//将获取到的数据绑定到前端控件上进行显示 rptProducts.DataBind(); //设置分页控件的属性 pager.CurrentPageIndex = currentPage; pager.PageSize = pageSize; pager.RecordCount = totalCount; pager.Visible = true; } protected void pager_PageChanged(object sender, EventArgs e) { BindData();//重新获取数据并进行显示 } ``` 前端代码: ```html <asp:Repeater ID="rptProducts" runat="server"> <ItemTemplate> <div><%# Eval("ProductName") %></div> </ItemTemplate> </asp:Repeater> <asp:DataPager ID="pager" runat="server" OnPreRender="pager_PreRender" OnPagerCommand="pager_PageChanged"> <Fields> <asp:NumericPagerField ButtonCount="10" /> </Fields> </asp:DataPager> ``` 注意事项: 1. 在获取数据总数时,可以使用SQL语句或者ORM框架等方式。 2. 在获取要显示的数据时,需要使用类似于ROW_NUMBER() OVER (ORDER BY xxx)的方式来进行分页。 3. 在分页控件的事件处理程序,需要重新获取数据并进行显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值