牛腩新闻发布系统-分页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
between //用于查询两者之间内容的关键字
@startIndex// 开始范围
@endIndex//结束的范围
格式
between @startIndex and @endIndex
表示查询内容是在@startIndex 和 @endIndex之间(包含@startIndex和 @endIndex)
SQL语句拆解
降序
给新闻表里"id"列进行降序,并且同时产生一个临时表用于后续查询。
代码
(select ROW_NUMBER() over (order by id desc) as row,T.*
from news T)
结果
设置别名
给上一步降序之后产生的临时表设置一个别名“TT”,方便再次调用。
代码
查询上一步产生的临时表,并且设置别名。
select * from (select ROW_NUMBER() over
(order by id desc) as row,T.* from news T) as TT
最后完整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
使用 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>
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");
}
}
绑定新闻列表
#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
分页控件改变事件
#region 分页按钮改变事件
/// <summary>
/// 分页按钮改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void AspNetPager2_PageChanged(object sender, EventArgs e)
{
BindNews();//绑定和显示分页内容
}
#endregion
BLL
#region 选择全部新闻
public DataTable SelectAll() {
return newsDAO.SelectAll();
}
#endregion
#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
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
#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
结果
欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343