牛腩新闻发布系统-分页SQL语句详解&&实例

举报
ksh1998 发表于 2021/12/25 23:59:32 2021/12/25
【摘要】 前言 牛腩新闻发布系统是目前接触的第一个b/s项目,所以也是第一次应用分页的这个功能和使用这个技术点。分页从原理上分为真分页和假分页两种。今天详细介绍真分页的SQL语句,以及使用到的一些控件。 目录...

前言
牛腩新闻发布系统是目前接触的第一个b/s项目,所以也是第一次应用分页的这个功能和使用这个技术点。分页从原理上分为真分页和假分页两种。今天详细介绍真分页的SQL语句,以及使用到的一些控件。

分页SQL语句

 select * from (select ROW_NUMBER() over 
 (order by id desc)  as row,T.* from news T) as TT 
 where TT.row between @startIndex and @endIndex

  
 
  • 1
  • 2
  • 3

between //用于查询两者之间内容的关键字
@startIndex// 开始范围
@endIndex//结束的范围
格式

 between @startIndex and @endIndex

  
 
  • 1

表示查询内容是在@startIndex 和 @endIndex之间(包含@startIndex和 @endIndex)

SQL语句拆解

降序

给新闻表里"id"列进行降序,并且同时产生一个临时表用于后续查询。

代码

(select ROW_NUMBER() over (order by id desc) as row,T.*
 from news T)

  
 
  • 1
  • 2

结果

在这里插入图片描述

设置别名

给上一步降序之后产生的临时表设置一个别名“TT”,方便再次调用。

代码

查询上一步产生的临时表,并且设置别名。

 select * from (select ROW_NUMBER() over 
 (order by id desc) as row,T.* from news T) as TT

  
 
  • 1
  • 2

最后完整SQL语句

 select * from (select ROW_NUMBER() over 
 (order by id desc)  as row,T.* from news T) as TT 
 where TT.row between @startIndex and @endIndex

  
 
  • 1
  • 2
  • 3

使用 where TT.row between @startIndex and @endIndex作为查询条件

应用实例-牛腩新闻管理分页显示

代码

Web

控件
AspNetPager2
web前端

 <webdiyer:AspNetPager ID="AspNetPager2"  runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" OnPageChanged="AspNetPager2_PageChanged" PageSize="5" AlwaysShow="true"></webdiyer:AspNetPager>

  
 
  • 1

web后端
加载代码

  protected void Page_Load(object sender, EventArgs e)
    {
        // 判断session里面是否存在管理员
        if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
        {
            // 已登陆
            if (!Page.IsPostBack)

            {
                DataTable dt = new NewsManager().SelectAll();
                AspNetPager2.RecordCount = dt.Rows.Count;//获取行数
                BindNews();//绑定和显示分页内容
            }
        }
        else
        {
            // 未登陆
            Response.Redirect("login.aspx");
        }

    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

绑定新闻列表

  #region 绑定新闻列表
    private void BindNews()
    {
        int startIndex = AspNetPager2.StartRecordIndex;
        int endIndex = AspNetPager2.EndRecordIndex;
        DataTable dt =new NewsManager().SelectToPage(startIndex, endIndex);
        repNews.DataSource = dt;
        repNews.DataBind();
    }
    #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

分页控件改变事件

  #region 分页按钮改变事件
    /// <summary>
    /// 分页按钮改变事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void AspNetPager2_PageChanged(object sender, EventArgs e)
    {
        BindNews();//绑定和显示分页内容
    }
    #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

BLL

  #region 选择全部新闻
        public DataTable SelectAll() {
            return newsDAO.SelectAll();
        }
        #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
   #region
        /// <summary>分页选择新闻  
        ///   
        /// </summary>  
        /// <param name="startIndex">
        选定页的第一条新闻索引</param>  
        /// <param name="endIndex">
        选定页的最后一条新闻索引</param>  
        /// <returns>
        选定页的新闻内容
        </returns>  
        public DataTable SelectToPage(int startIndex, 
        int endIndex)
        {

           DAL.NewsDAO nd = new DAL.NewsDAO();
          return nd.SelectToPage(startIndex, endIndex);
        }
        #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

DAL

   #region 查询所有新闻
        /// <summary>
        /// 查询所有新闻
        /// </summary>
        /// <returns></returns>
        public DataTable SelectAll() {
            DataTable dt = new DataTable();
            string sql = "select * from news";
            dt = new SQLHelper().ExecuteQuery(sql,CommandType.Text);
            return dt;
        }
        #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
 #region 分页选择新闻
        /// <summary>  
        ///   分页选择新闻
        /// </summary>  
        /// <param name="startIndex">
        选定页的第一条新闻索引</param>  
        /// <param name="endIndex">
        选定页的最后一条新闻索引</param>  
        /// <returns>选定页的新闻内容</returns>  
        public DataTable SelectToPage(int startIndex,
         int endIndex)
        {
            DataTable dt = new DataTable();
            SqlParameter[] paras = new SqlParameter[]
           {
          new SqlParameter ("@startIndex",startIndex ),
              
            new SqlParameter("@endIndex",endIndex)
           };
            string sql = "select * from
            (select ROW_NUMBER() 
            over (order by id desc) 
            as row,T.* from news T) 
            as TT where TT.row between
             @startIndex and @endIndex";
            dt =sqlheper.ExecuteQuery(sql, paras,
             CommandType.Text);
            return dt;

        }
        #endregion

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

结果

在这里插入图片描述

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/107013329

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。