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

10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程)源码 有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc4+Dapper+Dapper扩展+Sqlserver 目前主要实现了两种分页:一种采用 PagedList.Mvc 实现的分页 两外一种采用 ajax异步加载分页 采用比较常用的jquery.pagination 分页插件。 立即下载

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' onkeydown='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>

dapper的调用各种存储过程的方法 dapper的调用各种存储过程的方法的帮助类文档,可通过该文档了解并学会使用Dapper,并且调用Dapper 立即下载

相关推荐

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3342

一个将数据分页的存储过程

create procedure sp_page  @tb         varchar(50), --表名  @col        varchar(50), --按该列来进行分页  @coltype    int,         --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型  @orderby    bit,         --排序,0-顺序,1-倒序  @coll

lovelulin的专栏 699

Log4Shell漏洞复现:从原理到实战的完整指南

日志记录是软件开发中用于追踪应用状态和排查问题的关键技术。然而,当日志组件对用户输入进行不当解析时,可能引发严重的安全风险。Log4j2作为Java生态中广泛使用的日志框架,其Lookup功能允许在日志中动态插入变量,这一设计初衷虽为便利,却因递归解析机制埋下了隐患。攻击者通过构造特定的JNDI(Java命名和目录接口)查询字符串,可诱使应用加载并执行远程恶意代码,从而实现远程命令执行。这种漏洞的价值在于其极低的利用门槛和极高的潜在危害,常被用于渗透测试和安全评估中,以验证系统的防御能力。本文以CVE-20

weixin_30496999的博客 276

简单的SQL Server数据库存储过程分页

最简单的SQL Server数据库存储过程分页: 1.只需要提供Sql语句和每页的记录数,页数就可以了 2,速度超快哟,100W记录1~3秒就分出来了 3,对于存储过程特别好用 --//调用的方式 表 exec up_PageBySql 'select * from 表',10,3 存储过程 exec up_PageBySql 'exec 存储过程...

joan0106的专栏 227

电机控制中ADC采样时序的优化策略与实践

本文深入探讨了电机控制中ADC采样时序的优化策略与实践,重点分析了BLDC和FOC控制方案中的核心挑战与解决方案。通过硬件布局优化、软件滤波技术及动态时序补偿等方法,有效提升电流采样精度和系统稳定性,为电机控制系统的性能优化提供实用指导。

weixin_42519985的博客 386

基于CAT的VBM和SBM计算学习笔记(二)感兴趣区(ROI)&全脑体积(TIV)

本文介绍了用cat12运算VBM前,如何抓取ROI信息;运算VBM后,如何转化ROI文件和提取全脑体积,为之后的统计分析做好准备。t=N7T8基于CAT的VBM和SBM计算学习笔记(一)VBMhttps://mp.youkuaiyun.com/mp_blog/creation/editor/140665644。

Rose9614的博客 4358

使用数据库存储过程完成一个简单分页

--存储过程、row_number完成分页if (object_id('pro_page', 'P') is not null) drop proc proc_cursorgocreate proc pro_page @startIndex int, @endIndex intas select count(*) from product; sele...

weixin_30642869的博客 127

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2615

一个简单的oracle分页存储过程的实现和调用

一个简单的oracle分页存储过程的实现和调用 一个简单的oracle分页存储过程的实现和调用 在oracle的存储过程中返回记录集,需要用到游标变量,oracle不能像sqlserver那样可以直接返回一个记录集。 由于设想在.net中把复杂的sql语句生...

Lzh19941104的博客 200

基于YOLOv11的建筑图纸物体检测系统设计与实现

包含多种建筑平面图,标注了墙体、门窗等元素:CAD格式的建筑图纸数据集:专门针对建筑元素的标注数据集自定义数据集:使用LabelImg等工具自行标注的建筑图纸本文以FloorPlanDataset为基础,结合部分自定义标注数据构建混合数据集。wall (墙体)door (门)window (窗)stair (楼梯)furniture (家具)text (文字标注)dimension (尺寸标注)column (柱子)

YOLO 536

学Simulink——基于Simulink的扰动观测器(DOB)补偿坡道重力分量

(质量5kg,坡度30°,目标速度1m/s)为例,基于Simulink搭建“DOB+PI”复合控制仿真平台,从系统建模、DOB算法推导、离散化实现到Simulink模块搭建,提供模块化模型、核心代码及参数整定表,帮助工程师彻底解决重力等恒值扰动引起的稳态误差问题。采用双线性变换(Tustin): s=Ts​2​z+1z−1​,其中 Ts​为控制周期。模块相加(注意符号:ufinal​=upi​−ucomp​或 upi​+ucomp​,取决于扰动定义方向,此处假设重力为正,控制力需反向抵消,故为减)。

MHD0815的博客 69

Sqlserver,MySql 通用分页存储过程

SqlServer 分页存储过程 create proc [dbo].[procPage] @tableName varchar(20),--表名 @showField varchar(100),--要显示的列名 @whereText varchar(500),--where条件(只需要写where后面的语句) @orderText varchar(500),--排序条件(只需要写order b

liwateryi的专栏 2116

Unity零基础到进阶 | Unity 探针系统深度解析:光照探针、反射探针与相关技术

在 Unity 渲染管线中,探针(Probe) 是一类通过预计算或实时采样来捕捉空间光照信息的核心组件。它们弥补了传统静态光照贴图和实时光源各自的局限性,是实现高质量、高性能全局光照效果的关键工具。 本文将系统介绍光照探针(Light Probe)和反射探针(Reflection Probe)的作用与用法,分析二者之间的协同关系,并延伸介绍自适应探针体积(APV)、光照探针代理体(LPPV)、探针体积等进阶技术。

努力前行,总会成为自己心中的那道光 1万+

简单的分页存储过程!

1.模拟数据 use xacus; --creat some data declare @serial int set @serial=1 while @serial<100 begin insert into KHZL(SEARIL) values(@serial) set @serial=@serial+1; end 2.存储过程 CREATE proc proc_split

追 1591

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

利用存储过程分页

最简单的SQL Server数据库存储过程分页:1.只需要提供Sql语句和每页的记录数,页数就可以了 2,速度超快哟,100W记录1~3秒就分出来了 3,对于存储过程特别好用 --//调用的方式 表 exec up_zbh_DivPageBySql select * from 表,10,3 存储过程 exec up_zbh_DivPageBySql exec

he21he21的专栏 847

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分享一个Winform下的分页控件

前两天有一个简单的C/S项目用到分页,因为是Winform下,没有现成的,自己也懒得写,就找了下,看到了ycmoon的一个控件 http://www.cnblogs.com/ycmoon/archive/2010/01/07/1640689.html 参考后,做了简化,只保留了分页的部分,主要是点击事件的Delegate,未做过多测试,有兴趣的朋友可以下载源码自行修改,如有好的建议,...

dfdfadsf3443的博客 240

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

oracle分页存储过程

1、创建测试表 create table Account(    cardId char(20) primary key,  --帐号    name char(20) not null,         --姓名        money numeric(20,2)         --存款); 2、录入测试数据 insert into Account values('0001','张三'...

xiaoyanxuezhou的专栏 144

分页存储过程

USE [QHWCloud] GO /****** Object: StoredProcedure [dbo].[pr_paginationbyMoney] Script Date: 09/06/2017 15:39:37 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -------...

76

Oracle 简易的分页存储过程

<br />写个简单的存储过程权当练习<br /> <br />create or replace package  MAHANPACK as<br /><br />type my_cursor is  ref cursor;<br />end MAHANPACK;<br />-------------------------------------<br />create or replace package body PAGEUTIL is<br />procedure   getResults(<br

macower 技术专栏 1026

分享一个Winform下的分页控件[转]

分享一个Winform下的分页控件[转] 前两天有一个简单的C/S项目用到分页,因为是Winform下,没有现成的,自己也懒得写,就找了下,看到了ycmoon的一个控件 http://www.cnblogs.com/ycmoon/archive/2010/01/07/1640689.html 参考后,做了简化,只保留了分页的部分,主要是点击事件的Delegate,未做过多测试,有

farmwang的专栏 555

自己写的通用分页存储过程

  新手一个,写的最简单的存储过程分页,上代码吧,还请大神们多多调教!    1 USE [BMS] 2 GO 3 /****** Object: StoredProcedure [dbo].[Pages] Script Date: 12/21/2015 11:48:57 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUO...

weixin_30726161的博客 75

关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现

参考了许多的资料和不断地调试,总算把这个问题弄清楚了。实现了一个简单的分页示例,虽然这样的做法不是太好。 程序有3个控件 BindingNavigator: 就是DataGridView控件上面的那个,在工程里名字: bindngrDemo DataGridView: dgvDemo BindingSource: 这个其实可以不要 bindseDemo 示例采用的是SQL S...

weixin_30825581的博客 186

Asp.net 简单实现无闪刷分页

1、新建一个分页存储过程: CREATEprocedure[dbo].[P_Pager] (@PageNumberint, @PageSizeint) as declare@sqlnvarchar(4000) set@sql='selecttop'+Convert(varchar,@PageSize)+'*from...

weixin_30569033的博客 188
上一篇: SQL Server 存储过程的分页
web_snow
博客等级 码龄21年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值