一个简单的存储过程数据分页

1。数据库结构为:(在SQL当中建立一个数据库后,直接在SQL结构查询器当中执行以下SQL脚本)

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Mobile]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Mobile]
GO

CREATE TABLE [dbo].[Mobile] (
 [MobileID] [int] IDENTITY (1, 1) NOT NULL ,
 [MobileType] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

2。存储过程,(可以直接在数据库中新建存储过程,然后复制到数据库)

/*
存储过程分页
*/
CREATE PROCEDURE Proc_Paging
(
@TBName NVARCHAR(255) ,
@SQL nVARCHAR(4000),    --不带排序语句的SQL语句
@Page int,              --页码
@RecsPerPage int,       --每页容纳的记录数
@ID VARCHAR(255),       --需要排序的不重复的ID号
@Sort VARCHAR(255) ,     --排序字段及规则
@PageCount INT OUTPUT          --总页数
)
AS
BEGIN
 DECLARE @sql1 nvarchar(4000)
 SET @sql1=N'SELECT @PageCount=COUNT(*)'
  +N' FROM '+@tbname  
 EXEC sp_executesql @sql1,N'@PageCount int OUTPUT',@PageCount OUTPUT
 SET @PageCount=(@PageCount+@RecsPerPage-1)/@RecsPerPage
END
BEGIN
DECLARE @Str nVARCHAR(4000)
SET @Str='SELECT   TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM ('+@SQL+') T WHERE T.'+@ID+' NOT IN (SELECT   TOP '+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') T9 ORDER BY '+@Sort+') ORDER BY '+@Sort
--PRINT @Str
--EXEC sp_ExecuteSql @Str
--EXEC @Str
DECLARE @Str1 NVARCHAR(400)
DECLARE @Str2 NVARCHAR(400)
SET @Str1 = CAST(@RecsPerPage AS VARCHAR(20))
SET @Str2 = CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))
EXEC ( N'SELECT   TOP '+@Str1+ N' * FROM ('+@SQL+N') T WHERE T.'+@ID+N' NOT IN (SELECT   TOP '+@Str2+N' '+@ID+N' FROM ('+@SQL+N') T9 ORDER BY '+@Sort+N') ORDER BY '+@Sort )
END
GO

3。程序代码:(index.aspx.cs文件)

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace Joyes.Test
{
 /// <summary>
 //--------------------------------------------------
 //--功能模块:存储过程分页
 //--说明:很简单
 //--编写人:黄治强
 //--编写时间:2005.9.5 
 //---------------------------------------------------
 /// </summary>
 public class index : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid dg;
  protected System.Web.UI.WebControls.Label lblPaging;  
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if( !Page.IsPostBack )
   {
    if(Request.QueryString["page"] == null)
    {  
     //第一次开启页面时默认传递的页码参数为1
     DataBindDg2(1);
    }
    else
    {
     DataBindDg2(int.Parse(Request.QueryString["page"].ToString()));
    }
   }
  }  

  /// <summary>
  /// 利用存储过程取出数据并邦定到DataGrid
  /// </summary>
  /// <param name="intPage">需要传递的翻页页码的GET参数(int)</param>
  private void DataBindDg2(int intPage)
  {

   string str1 = " select * from Mobile ";//不带排序语句的SQL语句   
   int intRecsPerPage = 10;//每页容纳的记录数
   string strID = " MobileID ";//需要排序的不重复的ID号
   string strSort = " MobileID ";//排序字段及规则
   string strTBName = "Mobile";//数据库当中的要提取数据的表
   
   
   SqlConnection con = new SqlConnection("uid=sa;pwd=123456;database=Test;");   
   SqlCommand cmd = new SqlCommand("Proc_Paging",con);   
   cmd.CommandType = CommandType.StoredProcedure;    

   cmd.Parameters.Add(new SqlParameter("@SQL",SqlDbType.NVarChar,4000));
   cmd.Parameters.Add(new SqlParameter("@Page",SqlDbType.Int));
   cmd.Parameters.Add(new SqlParameter("@RecsPerPage",SqlDbType.Int));
   cmd.Parameters.Add(new SqlParameter("@ID",SqlDbType.NVarChar,255));
   cmd.Parameters.Add(new SqlParameter("@Sort",SqlDbType.NVarChar,255));
   cmd.Parameters.Add(new SqlParameter("@TBName",SqlDbType.NVarChar,255));

   SqlParameter parameterPageCount = new SqlParameter("@PageCount",SqlDbType.Int);
   parameterPageCount.Direction = ParameterDirection.Output;
   cmd.Parameters.Add(parameterPageCount);

   cmd.Parameters["@SQL"].Value = str1;
   cmd.Parameters["@Page"].Value = intPage;
   cmd.Parameters["@RecsPerPage"].Value = intRecsPerPage;
   cmd.Parameters["@ID"].Value = strID;
   cmd.Parameters["@Sort"].Value = strSort;
   cmd.Parameters["@TBName"].Value = strTBName;   
   
   try
   {    
    using(SqlDataAdapter ad = new SqlDataAdapter(cmd))
    {    
     DataSet ds = new DataSet();
     ad.Fill(ds);
     dg.DataSource = ds.Tables[0].DefaultView;
     dg.DataBind();    
    }
   }
   catch(Exception Error)
   {
    string strError = Error.ToString();
   }
   finally
   {
    if( con != null || con.State == ConnectionState.Open )
    {      
     con.Close();
    }
   }  
   
   lblPaging.Text = GetlblPagingBind(Request.QueryString["Page"],parameterPageCount.Value.ToString());
  } 

  /// <summary>
  /// 返回分页工具栏HTML编码
  /// </summary>
  /// <param name="strParameter">需要传递的翻页页码的GET参数(string)</param>
  /// <param name="strPageCount">表的总页数(string)</param>
  /// <returns>strPageBar</returns>
  public string GetlblPagingBind(string strParameter,string strPageCount)
  {
   string strPage = string.Empty;
   
   if( strParameter == null )
   { strPage = "1"; }
   else
   { strPage = strParameter;  }
   
   
   //设置页码
   string strPageBar="";   
   if (dg.AllowPaging.ToString()  == "False" )
   {
    strPageBar+="<nobr>/n";
    strPageBar+="[当前页]:"+(int.Parse(strPage)).ToString()+"/"+strPageCount+"&nbsp;/n";
   
    if (strPage == "1")
    {
     strPageBar+="<a disabled='disabled'>[第一页]</a>&nbsp;/n";
     strPageBar+="<a disabled='disabled'>[上一页]</a>&nbsp;/n";
    }
    else
    {
     strPageBar+="<a href=/"?"+strParameter+"&page=1/">[第一页]</a>&nbsp;/n";
     strPageBar+="<a href=/"?"+strParameter+"&page="+(int.Parse(strPage)-1).ToString()+"/">[上一页]</a>&nbsp;/n";
    }

    if (strPage == strPageCount)
    {
     strPageBar+="<a disabled='disabled'>[下一页]</a>&nbsp;/n";
     strPageBar+="<a disabled='disabled'>[最后一页]</a>&nbsp;/n";
    }
    else
    {
     strPageBar+="<a href=/"?"+strParameter+"&page="+(int.Parse(strPage)+1).ToString()+"/">[下一页]</a>&nbsp;/n";
     strPageBar+="<a href=/"?"+strParameter+"&page="+strPageCount+"/">[最后一页]</a>&nbsp;/n";
    }
    strPageBar+=@"<script language='javascript'>function goto(page){if(!/^/d+$/.test(page))alert('页码格式不正确'); else this.location='?&page='+page;}</script>";
    strPageBar+="<a href=/"javascript:goto(document.getElementById('tboxPage').value)/" id='LinkGoto'>[跳转到第]</a>/n";
    strPageBar+="<INPUT class='input' id='tboxPage' type='text' size='3' οnkeydοwn='javascript:if(event.keyCode==13){goto(this.value);return false;}'>/n";
    strPageBar+="[页]/n";
    strPageBar+="</nobr>";
   }
   return strPageBar;
  }
  
  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion
 }
}

4。Web页面代码(index.aspx)

<%@ Page language="c#" Codebehind="index.aspx.cs" AutoEventWireup="false" Inherits="Joyes.Test.index" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>WebForm1</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <asp:datagrid id="dg" style="Z-INDEX: 102; LEFT: 40px; POSITION: absolute; TOP: 40px" runat="server"
     AutoGenerateColumns="False" Height="96px">
     <Columns>
      <asp:BoundColumn DataField="MobileType" HeaderText="手机类型"></asp:BoundColumn>
      <asp:BoundColumn DataField="MobileID" HeaderText="铃声名字"></asp:BoundColumn>
      <asp:BoundColumn DataField="MobileID" HeaderText="MobileID"></asp:BoundColumn>
     </Columns>
     <PagerStyle Mode="NumericPages"></PagerStyle>
    </asp:datagrid><asp:label id="lblPaging" style="Z-INDEX: 103; LEFT: 48px; POSITION: absolute; TOP: 368px"
     runat="server"></asp:label></FONT></form>
 </body>
</HTML>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要准备好Vue和axios,然后创建一个Vue实例,在实例中定义一个data函数,用于存储分页查询的信息,包括当前页数、每页的数量和总数量等。在created函数中,调用axios来发送请求,获取分页数据。在mounted函数中,初始化分页器。在methods函数中,添加分页器的处理函数,实现点击分页器时触发axios来获取分页数据。 ### 回答2: Vue.js是一种用于构建用户界面的JavaScript框架。它具有简单易用、高效灵活的特点,因此非常适合用来开发前端分页查询程序。 首先,我们需要安装Vue.js和Vue Router插件。然后创建一个Vue实例,并在该实例中定义一个组件用于处理分页查询功能。 在组件中,我们可以使用Vue的响应式数据存储查询结果和当前页码。我们还可以使用计算属性来根据总记录数和每页显示的数据量计算总页数。 接下来,我们需要在模板中定义一个表格来显示查询结果。可以使用v-for指令来遍历查询结果数组,并显示每条记录的相关信息。 为了实现分页功能,我们可以添加两个按钮或链接,一个用于切换到上一页,另一个用于切换到下一页。当点击按钮时,我们可以调用方法来更新当前页码,并重新查询数据。 为了实现数据的异步加载和渲染,我们可以使用Axios或Fetch等工具来发送HTTP请求,并接收服务器返回的数据。 最后,我们可以在Vue实例的mounted钩子函数中调用查询方法,来初始化数据并显示第一页的查询结果。 整个过程中,我们可以使用Vue的生命周期钩子函数来管理组件的生命周期,以便在适当的时候加载数据、监听事件、更新状态等。 通过以上步骤,我们就可以构建一个基本的Vue前端分页查询程序了。当用户输入查询条件并点击查询按钮时,程序将发送请求到后端服务器并获取分页查询结果,然后将结果显示在前端界面中。用户还可以通过按钮或链接来切换不同的页码,以便查看更多的查询结果。 ### 回答3: Vue是一个用于构建用户界面的渐进式JavaScript框架。使用Vue可以轻松地构建交互式的前端应用程序。下面是一个使用Vue实现前端分页查询的示例程序。 1. 在HTML文件中引入Vue和axios,axios是一个用于进行HTTP请求的库。 ```html <html> <head> <title>前端分页查询</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <h1>前端分页查询</h1> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr v-for="person in persons" :key="person.id"> <td>{{person.id}}</td> <td>{{person.name}}</td> <td>{{person.age}}</td> </tr> </tbody> </table> <div> <button @click="previousPage">上一页</button> <span>{{currentPage}}</span> <button @click="nextPage">下一页</button> </div> </div> <script src="script.js"></script> </body> </html> ``` 2. 在JavaScript文件中编写Vue实例和相关的方法。 ```javascript let app = new Vue({ el: '#app', data: { currentPage: 1, // 当前页码 pageSize: 10, // 每页显示的记录数 totalRecords: 0, // 总记录数 persons: [] // 查询结果 }, mounted() { this.loadData(); // 初始化时加载数据 }, methods: { loadData() { let startIndex = (this.currentPage - 1) * this.pageSize; // 计算查询起始位置 let url = `https://example.com/api/persons?startIndex=${startIndex}&pageSize=${this.pageSize}`; axios.get(url) .then(response => { this.persons = response.data; // 将查询结果赋值给persons数组 this.totalRecords = response.headers['x-total-count']; // 获取总记录数 }) .catch(error => { console.log(error); }); }, previousPage() { if (this.currentPage > 1) { this.currentPage--; this.loadData(); // 加载上一页数据 } }, nextPage() { let totalPages = Math.ceil(this.totalRecords / this.pageSize); if (this.currentPage < totalPages) { this.currentPage++; this.loadData(); // 加载下一页数据 } } } }); ``` 以上示例程序实现了一个简单的前端分页查询功能。用户可以点击“上一页”和“下一页”按钮来切换分页,并且查询结果会根据当前页码和每页记录数进行动态加载。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值