[ASP.NET2.0]如何利用 DataReader 实现分页

本文介绍了一种使用 SqlDataReader 实现数据库查询结果分页显示的方法。通过调整页面参数,可以从数据库中按需读取指定数量的数据记录,并展示每页的作者信息。此外,还实现了页码导航功能,便于用户浏览不同页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>如何利用 DataReader 实现分页</title>
</head>
<body >
<div>
<%
    
    System.Data.SqlClient.SqlConnection conn 
= new System.Data.SqlClient.SqlConnection("server=.;database=pubs;uid=sa;pwd=");
    System.Data.SqlClient.SqlCommand cmd 
= new System.Data.SqlClient.SqlCommand("",conn);

    
int rowIndex=1;
    
int pageId=1;
    
int maxRow=1;
    
int maxPage=1;
    
int pageSize = 5;


    
if (Request.QueryString["pageId"== null)
    {
        pageId 
= 1;
    }
    
else
    {
        pageId 
= int.Parse(Request.QueryString["pageId"].Trim());
    }
    

    try
    {
        
if (conn.State == System.Data.ConnectionState.Closed)
        {
            conn.Open();
        }

        cmd.CommandText 
= "select count(*) from authors";
        maxRow 
= (int)cmd.ExecuteScalar();
        maxPage
=(maxRow%pageSize>0)?(maxRow/pageSize+1):(maxRow/pageSize);

        cmd.CommandText 
= "select au_id,au_lname,au_fname,phone,address from authors";
        System.Data.SqlClient.SqlDataReader dr 
= cmd.ExecuteReader();

        
for (int i = 0; i < (pageId - 1* pageSize;i++ )
        {
            dr.Read();
            rowIndex
++;
        }

        
for (int i = rowIndex; i <(rowIndex+ pageSize);i++ )
        {
            
if (dr.Read())
            {

                Response.Write(i.ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(dr[
"au_id"].ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(dr[
"au_lname"].ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(dr[
"au_fname"].ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(dr[
"phone"].ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(dr[
"address"].ToString());
                Response.Write(
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                Response.Write(
"<hr/>");

            }

        }
        

    }
    catch (System.Data.SqlClient.SqlException e)
    {
        Response.Write(e.Message.ToString());
    }
    finally
    {
        
if (conn.State == System.Data.ConnectionState.Open)
        {
            conn.Close();
        }
    }

    
%>

<href="DataReader2.aspx?pageId=1">第一页</a>
 || 

<href="DataReader2.aspx?pageId=<%=(pageId>1)?(pageId-1):1 %>">上一页</a>
 || 

<href="DataReader2.aspx?pageId=<%=(pageId<maxPage)?(pageId+1):maxPage %>">下一页</a>
 || 

<href="DataReader2.aspx?pageId=<%=maxPage %>">最后页</a>

<hr />

记录总数为:
<%=maxRow %>
<br />
页码总数为:
<%=maxPage %>
<br />
当前页码为:
<%=pageId %>
</div>
</body>
</html>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值