`

本站原创sql server 2005 分页存储过程(同时得到记录总数)及其运用

阅读更多
导读:
  先看看运用:
  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;
  namespace behind
  {
  /// <summary><br>  /// members 的摘要说明。 <br>  /// </summary>
  public partial class members : System.Web.UI.Page
  {
  protected int allrecord=0;//记录总数
  private void Page_Load(object sender, System.EventArgs e)
  {
  behind.checkLogin.check(Session["administrator"],this,"您未登陆或者登陆超时","top.location='../login.aspx'");
  //获取页码
  string page = Request.QueryString["page"];
  if (!web.webfunction.isnum(page))
  page = "1";
  list.DataSource = web.PagerSql2005.PageData("members", "*", "memberid", 50, int.Parse(page), true, "", out allrecord);
  list.DataBind();
  //分页--这个是自己写的,很久以前的
  web.PagerOutString_en p = new web.PagerOutString_en();
  p.pagesize = 50;
  p.pagenow = int.Parse(page);
  p.querystring = this.Request.QueryString;
  p.size = allrecord
  pagebar.Text = p.showtext;
  p = null;
  }
  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
  //
  // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
  //
  InitializeComponent();
  base.OnInit(e);
  }
  
  /// <summary><br>  /// 设计器支持所需的方法 - 不要使用代码编辑器修改 <br>  /// 此方法的内容。 <br>  /// </summary>
  private void InitializeComponent()
  {
  this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
  }
  }
  这是web.PagerSql2005.PageData
  using System;
  using System.Data;
  using System.Data.SqlClient;
  namespace web
  {
  /// <summary><br>  /// PagerSql 的摘要说明 <br>  /// </summary>
  public class PagerSql2005
  {
  public PagerSql2005()
  {
  //
  // TODO: 在此处添加构造函数逻辑
  //
  }
  public static DataTable PageData
  (string tblName,
  string fldCow,
  string fldName,
  int PageSize,
  int PageIndex,
  bool OrderType,
  string strWhere,
  out int count
  )
  {
  web.Database data = new web.Database();
  SqlParameter[] prams = {
  data.MakeInParam("@tblName", SqlDbType.VarChar, 50, tblName),
  data.MakeInParam("@fldCow", SqlDbType.VarChar, 100, fldCow),
  data.MakeInParam("@fldName", SqlDbType.VarChar, 100, fldName),
  data.MakeInParam("@PageSize", SqlDbType.Int, 50, PageSize),
  data.MakeInParam("@PageIndex", SqlDbType.Int, 50, PageIndex),
  data.MakeInParam("@OrderType", SqlDbType.Bit, 1, OrderType==true?1:0),
  data.MakeInParam("@strWhere", SqlDbType.VarChar, 200, strWhere),
  data.MakeOutParam("@count", SqlDbType.Int, 4)
  };
  DataTable dt=data.RunProcToDataTable("_PagerSql2005_out_count", prams);
  data.Close(); data.Dispose();
  count = (int)prams[7].Value;
  return dt;
  }
  }
  }
  以下是sql server 2005 分页存储过程的代码,同时得到记录总数:
  /*
  GO
  -- 对象: StoredProcedure [dbo].[_PagerSql2005_out_count] 脚本日期: 03/31/2007 14:51:11 -
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  create procedure [dbo].[_PagerSql2005_out_count]
  (
  --1,参数的括号可要可不要,有默认值的参数,在调用的时候,可以不写出来
  --2,调用:
  --declare @i int
  --exec _PagerSql2005_out_count 'list','id,title','id',3,4,1,'classid=6',@i out
  @tblName varchar(100), -- 表名
  @fldCow varchar(100)='*', -- 要查询的列
  @fldName varchar(255), -- 排序列
  @PageSize int = 10, -- 页尺寸
  @PageIndex int = 1, -- 页码
  @OrderType bit = 1, -- 设置排序类型, 1则降序
  @strWhere varchar(200) = '', -- 查询条件 (注意: 不要加 where)
  @count int output --输入符合条件的记录的总数
  )
  AS
  declare @strSQL varchar(1000); -- 主语句
  declare @strOrder varchar(500) ; -- 排序类型
  declare @strTmp varchar(100) ; --临时变量
  declare @endIndex int; -- 结束的索引
  declare @startIndex int; -- 开始的索引
  declare @countSql nvarchar(500); --查询记录总数的SQL
  --得到索引
  set @startIndex=(@PageIndex-1)*@PageSize + 1;--注意,这里要加1
  set @endIndex=@PageIndex*@PageSize;
  --生成排序语句
  --为了多表联合查询,这里要把表名字和排序字段的[]去掉-
  if @OrderType != 0
  set @strOrder = ' order by ' + @fldName + ' desc'
  else
  set @strOrder = ' order by ' + @fldName + ' asc'
  set @strSQL = '(select top ' + ltrim(str(@endIndex)) + ' '+@fldCow+','
  + 'row_number() over ('+ @strOrder +') as rownumber from '
  + @tblName + '' ;
  set @countSql= 'select @count=count('+@fldName+') from '+ @tblName ;
  
  if @strWhere! = ''
  begin
  set @strSQL =@strSQL+ ' where ('+ @strWhere + ') ';
  set @countSql=@countSql + ' where ('+ @strWhere + ') ';
  end
  set @strSQL =@strSQL+ ') as tblTmp'
  --得到记录总数
  set @countSql=N'select @count=count(*) from ' + @tblName;
  if @strWhere! = ''
  set @countSql=@countSql+ N' where ' + @strWhere;
  EXEC sp_executesql @countSql,N'@count int out',@count out
  set @strSQL = 'select * from ' + @strSQL + ' where rownumber between ' + ltrim(str(@startIndex)) + ' and '
  + ltrim(str(@endIndex));
  --执行主语句
  set nocount on -- 防止显示有关受影响的行数的信息
  exec (@strSQL)
  --print @strSQL
  */
  以下是DATABASE代码:
  using System;
  using System.ComponentModel;
  using System.Collections;
  using System.Diagnostics;
  using System.Data;
  using System.Data.SqlClient;
  using System.Configuration;
  namespace web
  {
  public class Database : IDisposable
  {
  private SqlConnection con;
  public Database()
  {
  }
  public System.Data.DataTable RunProcToDataTable(string procName, SqlParameter[] prams)
  {
  //执行带参数的存储过程,返回datatable
  SqlCommand cmd = CreateCommand(procName, prams);
  SqlDataAdapter da = new SqlDataAdapter(cmd);
  System.Data.DataTable dt = new DataTable();
  da.Fill(dt);
  da.Dispose();
  cmd.Dispose();
  this.Close();
  return dt;
  }
  public System.Data.DataTable RunProcToDataTable(string procName)
  {
  //执行不带参数的存储过程,返回datatable
  SqlCommand cmd = CreateCommand(procName, null);
  SqlDataAdapter da = new SqlDataAdapter(cmd);
  System.Data.DataTable dt = new DataTable();
  da.Fill(dt);
  da.Dispose();
  cmd.Dispose();
  this.Close();
  return dt;
  }
  public void RunProc(string procName, SqlParameter[] prams)
  {
  //执行带参数的存储过程
  SqlCommand cmd = CreateCommand(procName, prams);
  cmd.ExecuteNonQuery();
  this.Close();
  return;
  }
  public void RunProc(string procName)
  {
  //执行不带参数的存储过程
  SqlCommand cmd = CreateCommand(procName, null);
  cmd.ExecuteNonQuery();
  this.Close();
  return;
  }
  public void RunProcToReader(string procName, out SqlDataReader dataReader)
  {
  //执行不带参数的存储过程,返回datareader
  SqlCommand cmd = CreateCommand(procName, null);
  dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  }
  public void RunProcToReader(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
  {
  //执行带参数的存储过程,返回datareader
  SqlCommand cmd = CreateCommand(procName, prams);
  dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  }
  
  private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
  {
  //构造SqlCommand
  Open();
  SqlCommand cmd = new SqlCommand(procName, con);
  cmd.CommandType = CommandType.StoredProcedure;
  if (prams != null)
  {
  foreach (SqlParameter parameter in prams)
  cmd.Parameters.Add(parameter);
  }
  
  return cmd;
  }
  private void Open()
  {
  //打开数据库连接
  if (con == null)
  {
  con = new SqlConnection(ConfigurationSettings.AppSettings["cnstr"]);
  con.Open();
  return;
  }
  
  if (con.State==ConnectionState.Closed)
  {
  con.Open();
  return;
  }
  }
  public void Close()
  {
  //关闭数据库连接
  if (con != null)
  con.Close();
  }
  public void Dispose()
  {
  //释放资源
  if (con != null)
  {
  con.Dispose();
  con = null;
  }
  }
  public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
  {
  //构造输入参数
  return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  }
  public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
  {
  //构造输出参数
  return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
  }
  public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
  {
  //构造参数
  SqlParameter param;
  if(Size >0)
  param = new SqlParameter(ParamName, DbType, Size);
  else
  param = new SqlParameter(ParamName, DbType);
  param.Direction = Direction;
  if (!(Direction == ParameterDirection.Output &&Value == null))
  param.Value = Value;
  return param;
  }
  }
  }

本文转自
http://omeweb.com/content.aspx?id=2316
分享到:
评论

相关推荐

    标准SQLServer分页存储过程

    ### 标准SQL Server分页存储过程:深入解析与应用 在处理大量数据时,分页技术是提高数据展示效率和用户体验的关键。SQL Server提供的存储过程是实现分页功能的有效方式之一。本文将深入探讨微软C# .NET中的宠物...

    ,sql2005万能分页存储过程

    根据提供的文件信息,本文将详细解释SQL Server 2005中的一个通用分页存储过程。此存储过程可用于实现高效且灵活的分页查询功能,适用于多种数据表或视图。 ### 存储过程概述 #### 标题:SQL 2005 万能分页存储...

    SQL Server存储过程同时返回分页结果集和总数

    总的来说,理解并掌握这种在存储过程中同时返回分页结果集和总数的方法,对于SQL Server数据库开发人员来说非常重要,尤其是在处理大型数据集和创建高效的数据报表时。这样的技术可以帮助优化用户体验,同时保持...

    sql2005分页存储过程

    ### SQL2005 分页存储过程解析及应用 #### 概述 SQL Server 2005 是一款广泛使用的数据库管理系统,在数据处理方面提供了强大的功能。本文将深入解析一个SQL2005分页存储过程,该过程支持多字段排序,并通过具体的...

    SQL Server 在分页获取数据的同时获取到总记录数

    SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn, ...

    SQLServer 常用存储过程

    ### SQL Server 常用存储过程详解 #### 一、分页存储过程 GetRecordSet 在 SQL Server 中,实现分页功能是...以上是 SQL Server 中一些常用的存储过程及其使用方法,它们可以帮助开发者更高效地管理和操作数据库。

    jsp+sqlserver分页代码

    - 使用`last()`方法将结果集定位到最后一条记录,通过`getRow()`获取记录总数。 - 计算出每页显示的记录数`pagesize`(此处为17)。 - 通过除法和取余运算计算总页数。 - **定位结果集**: - 将结果集定位到当前...

    SQL Server分页详细方法

    --有查询条件的分页存储过程 create procedure dbo.Products_GetByPaging @PageSize int, --每页的记录数量,比如10条,传参数时就是10 @CurrentPage int --第N页,比如第5页,传参数就是5 as declare @PageCount ...

    sqlserver --游标 实现数据分页

    在给定的代码示例中,作者通过创建一个存储过程`proc_cursor`来实现基于游标的分页功能,这种方法虽然在某些场景下可能不如其他方法高效,但在理解SQL Server游标和分页原理方面提供了很好的学习材料。 ### 数据库...

    sql存储过程分页代码

    本文将详细解析一个SQL Server中的存储过程实现分页功能的代码。 #### 二、存储过程介绍 该存储过程名为`uspGetUsers`,主要用于从`Account_Users`表中获取用户信息,并支持分页显示。存储过程的参数包括: - `@...

    SQLSERVER Pager store procedure分页存储过程

    总结来说,`[dbo].[Pagination]`存储过程是一个强大且灵活的工具,用于实现SQL Server中的分页查询,它结合了动态SQL和参数化查询,能够适应各种查询需求,同时也提供了错误处理和状态反馈,使得在实际应用中更加...

    比较好用的通用sql存储过程(本人在网上搜寻来的)

    标签“SQL分页存储过程”和“sqlserver2005分页”进一步明确了本文档的主题,即如何利用SQL Server 2005中的存储过程实现高效的分页查询功能。 #### 存储过程代码详解 **存储过程定义** ```sql CREATE procedure ...

    很好的通过存储过程实现分页的技术

    本文将详细介绍如何利用存储过程来实现高效的数据分页,特别关注SQL Server 2000与SQL Server 2005下的两种分页存储过程:`Basic_Pagination2000`和`Basic_Pagination2005`。 #### `Basic_Pagination2000`:适用于...

    sql2000分页存储过程

    `@Sql`和`@SqlCount`变量分别用来存储分页查询和计算记录总数的SQL语句。 最终,存储过程会执行这两个SQL语句,将结果输出给用户,并返回总记录数和总页数。通过这种方式,`P_viewPage_A`能够灵活地处理不同的分页...

    万能分页存储过程

    本文将详细介绍一个名为“万能分页存储过程”的SQL Server存储过程,该存储过程可以实现在多种情况下的高效分页功能。 #### 二、存储过程定义 根据提供的部分代码内容,我们可以看出这是一个用于执行分页查询的存储...

    ORACLE分页存储过程

    之前一直用SQL SERVER做项目,但是现在需要用到ORACLE,在网上找了几个都无法正常调用,因此自己写了一个,给大家一起分享,在写的过程中学习到了很多东西,同时也体会到了SQL SERVER和ORACLE中的异同点 在分页存储...

    效率高的分页存储过程实现的分页

    本文将深入探讨如何通过使用存储过程来实现高效的分页存储过程,特别是针对ASP.NET应用程序。 标题 "效率高的分页存储过程实现的分页" 提到的是一种优化数据检索的技术。在ASP.NET开发中,GridView控件是常用的数据...

    Server2005高效分页存储过程(支持多字段排序,支持Group By)

    ### Server2005高效分页存储过程详解 在数据库应用开发中,高效地处理大量数据的查询结果是一项重要的技术需求。特别是在Web应用程序中,为了提高用户体验,避免服务器因加载大量数据而产生的性能问题,分页显示...

Global site tag (gtag.js) - Google Analytics