热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通用SQL存储过程分页以及asp.net后台调用的方法

下面小编就为大家带来一篇通用SQL存储过程分页以及asp.net后台调用的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

创建表格并添加300万数据

use Stored
CREATE TABLE UserInfo( --创建表
id int IDENTITY(1,1) PRIMARY KEY not null,--添加主键和标识列
UserName varchar(50) 
)
 
declare @i int --添加3百万数据,大概4分钟时间
set @i=1
while @i<3000000
begin
insert into UserInfo (UserName) values(@i)
set @i=@i+1
end

存储过程T-SQL

create PROCEDURE [dbo].[GetDataList]
(
 @TableName varchar(5000),    --表名
 @Fields varchar(5000) = '*',   --字段名(全部字段为*)
 @OrderField varchar(5000),    --排序字段(必须!支持多字段)
 @OrderType varchar(5000),    --排序类型
 @sqlWhere varchar(5000) = Null, --条件语句(不用加where)
 @pageSize int,          --每页多少条记录
 @pageIndex int = 1 ,       --指定当前为第几页
 @TotalPage int output,      --返回总页数 
 @totalRecord int output    --计算总记录数       --返回总记录数
 )
as
begin  Begin Tran --开始事务  
  
  Declare  @sql nvarchar(500); 
  if (@SqlWhere='' or @sqlWhere=NULL)
    set @sql = 'select @totalRecord = count(*) from ' + @TableName
  else
    set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere  
      EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数 
        
  
  --计算总页数
  select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)  if (@SqlWhere='' or @sqlWhere=NULL)
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField +' ' + @Ordertype+' ) as rowId,' + @Fields + ' from ' + @TableName 
  else
    set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField +' ' + @Ordertype+' ) as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere  

--处理页数超出范围情况
  if @PageIndex<=0 
    Set @pageIndex = 1
  
  if @pageIndex>@TotalPage
    Set @pageIndex = @TotalPage   --处理开始点和结束点
  Declare @StartRecord int
  Declare @EndRecord int
  
  set @StartRecord = (@pageIndex-1)*@PageSize + 1
  set @EndRecord = @StartRecord + @pageSize - 1  --继续合成sql语句
  set @Sql = @Sql + ') as ' + @TableName + ' where rowid between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord) 
  --print @Sql 
  
   Exec(@Sql)
  ---------------------------------------------------
  If @@Error <> 0
   Begin
    RollBack Tran
    Return -1
   End
   Else
   Begin
    Commit Tran
    Return @totalRecord ---返回记录总数
   End  
end
--exec GetDataList 'Userinfo','*','id','desc','',10,1,3,3000000

前台页面Default2.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>





  


  
  

后台CS代码Default2.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Text;


public partial class Default2 : System.Web.UI.Page
{  
  private int PageIndex = 0;//当前页码
  private int PageSize = 50;//每页几条记录
  private int TotalPage = 1;//总分页数
  private int TotalRecord = 0;//总记录
  private string OrderType = " desc";//排序方式 默认正序
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      GetParams();
      DataSet ds = PageData("UserInfo", "*", "id", OrderType, "", PageSize, PageIndex, out TotalPage, out TotalRecord);
      GridView1.DataSource = ds;
      GridView1.DataBind();
      lbl_page.Text = GetDivPager("", ds);
    }
  }

  //数据库连接字符
  public static string StrConn()
  {
    //return string.Format("{0}","server=.;database=Stored;user=sa;password=123456");
    return ConfigurationSettings.AppSettings["ConnString"].ToString();
  }
  //Get方式获得下一页
  private void GetParams()
  {
    if (!String.IsNullOrEmpty(Request["page"]))
    {
      PageIndex = Convert.ToInt32(Request["Page"]);
    }
    else
    {
      PageIndex = 1;
    }
  }
  #region 获得分页字符
  public string GetDivPager(string queryString, DataSet ds)
  {
    StringBuilder sp = new StringBuilder();
    int TotalCount = TotalRecord;
    int rowCount = TotalPage;
    if (ds != null)
    {
      sp.AppendFormat(" 

总记录:{0}", TotalCount); sp.AppendFormat(" 页码:{0}/{1} ", PageIndex, rowCount); sp.AppendFormat(" 每页:{0}

", PageSize); sp.AppendFormat(" 首页 ", "&#63;page=1" + queryString); if (PageIndex > 1) { sp.AppendFormat(" <上一页 ", "&#63;page=" + (PageIndex - 1) + queryString); } int temp = 0; int loopc = rowCount > 10 &#63; 10 : rowCount; for (int i = 0; i 10) { temp = (PageIndex - 10) + i + 1; } sp.AppendFormat(" {2}", PageIndex == temp &#63; "active" : "", "&#63;page=" + temp + queryString, temp); } if (PageIndex != rowCount) { sp.AppendFormat(" 下一页 >", "&#63;page=" + (PageIndex + 1) + queryString); } sp.AppendFormat(" 尾页", "&#63;page=" + rowCount + queryString); } else { ds = null; } return sp.ToString(); } #endregion #region 获取分页的数据 /// /// 获取分页的数据 /// /// 数据表名 /// 要读取的字段 /// 排序字段 /// 排序方式 /// 查询条件 /// 每页显示多少条数据 /// 当前页码 /// 返回值,共有多少页 /// 返回值,总有多少条记录 /// public static DataSet PageData(string TblName, string Fields, string OrderField, string OrderType, string SqlWhere, int PageSize, int pageIndex, out int TotalPage, out int TotalRecord) { SqlConnection cOnn= new SqlConnection(StrConn()); SqlCommand comm = new SqlCommand("GetDataList", conn); comm.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100)).Value = TblName; comm.Parameters.Add(new SqlParameter("@Fields", SqlDbType.NVarChar, 1000)).Value = Fields; comm.Parameters.Add(new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000)).Value = OrderField; comm.Parameters.Add(new SqlParameter("@OrderType", SqlDbType.NVarChar, 1000)).Value = OrderType; comm.Parameters.Add(new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000)).Value = SqlWhere; comm.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int)).Value = PageSize; comm.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int)).Value = pageIndex; comm.Parameters.Add(new SqlParameter("@TotalPage", SqlDbType.Int)); comm.Parameters["@TotalPage"].Direction = ParameterDirection.Output;//获得out出来的参数值 comm.Parameters.Add(new SqlParameter("@totalRecord", SqlDbType.Int)); comm.Parameters["@totalRecord"].Direction = ParameterDirection.Output; comm.CommandType = CommandType.StoredProcedure; SqlDataAdapter dataAdapter = new SqlDataAdapter(comm); DataSet ds = new DataSet(); dataAdapter.Fill(ds); TotalPage = (int)comm.Parameters["@TotalPage"].Value; TotalRecord = (int)comm.Parameters["@totalRecord"].Value; conn.Close(); conn.Dispose(); comm.Dispose(); return ds; } #endregion }

以上这篇通用SQL存储过程分页以及asp.net后台调用的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
author-avatar
陈醉在线wx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有