导读:
先看看运用: 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
分享到:
相关推荐
### 标准SQL Server分页存储过程:深入解析与应用 在处理大量数据时,分页技术是提高数据展示效率和用户体验的关键。SQL Server提供的存储过程是实现分页功能的有效方式之一。本文将深入探讨微软C# .NET中的宠物...
根据提供的文件信息,本文将详细解释SQL Server 2005中的一个通用分页存储过程。此存储过程可用于实现高效且灵活的分页查询功能,适用于多种数据表或视图。 ### 存储过程概述 #### 标题:SQL 2005 万能分页存储...
总的来说,理解并掌握这种在存储过程中同时返回分页结果集和总数的方法,对于SQL Server数据库开发人员来说非常重要,尤其是在处理大型数据集和创建高效的数据报表时。这样的技术可以帮助优化用户体验,同时保持...
### SQL2005 分页存储过程解析及应用 #### 概述 SQL Server 2005 是一款广泛使用的数据库管理系统,在数据处理方面提供了强大的功能。本文将深入解析一个SQL2005分页存储过程,该过程支持多字段排序,并通过具体的...
SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn, ...
### SQL Server 常用存储过程详解 #### 一、分页存储过程 GetRecordSet 在 SQL Server 中,实现分页功能是...以上是 SQL Server 中一些常用的存储过程及其使用方法,它们可以帮助开发者更高效地管理和操作数据库。
- 使用`last()`方法将结果集定位到最后一条记录,通过`getRow()`获取记录总数。 - 计算出每页显示的记录数`pagesize`(此处为17)。 - 通过除法和取余运算计算总页数。 - **定位结果集**: - 将结果集定位到当前...
--有查询条件的分页存储过程 create procedure dbo.Products_GetByPaging @PageSize int, --每页的记录数量,比如10条,传参数时就是10 @CurrentPage int --第N页,比如第5页,传参数就是5 as declare @PageCount ...
在给定的代码示例中,作者通过创建一个存储过程`proc_cursor`来实现基于游标的分页功能,这种方法虽然在某些场景下可能不如其他方法高效,但在理解SQL Server游标和分页原理方面提供了很好的学习材料。 ### 数据库...
本文将详细解析一个SQL Server中的存储过程实现分页功能的代码。 #### 二、存储过程介绍 该存储过程名为`uspGetUsers`,主要用于从`Account_Users`表中获取用户信息,并支持分页显示。存储过程的参数包括: - `@...
总结来说,`[dbo].[Pagination]`存储过程是一个强大且灵活的工具,用于实现SQL Server中的分页查询,它结合了动态SQL和参数化查询,能够适应各种查询需求,同时也提供了错误处理和状态反馈,使得在实际应用中更加...
标签“SQL分页存储过程”和“sqlserver2005分页”进一步明确了本文档的主题,即如何利用SQL Server 2005中的存储过程实现高效的分页查询功能。 #### 存储过程代码详解 **存储过程定义** ```sql CREATE procedure ...
本文将详细介绍如何利用存储过程来实现高效的数据分页,特别关注SQL Server 2000与SQL Server 2005下的两种分页存储过程:`Basic_Pagination2000`和`Basic_Pagination2005`。 #### `Basic_Pagination2000`:适用于...
`@Sql`和`@SqlCount`变量分别用来存储分页查询和计算记录总数的SQL语句。 最终,存储过程会执行这两个SQL语句,将结果输出给用户,并返回总记录数和总页数。通过这种方式,`P_viewPage_A`能够灵活地处理不同的分页...
本文将详细介绍一个名为“万能分页存储过程”的SQL Server存储过程,该存储过程可以实现在多种情况下的高效分页功能。 #### 二、存储过程定义 根据提供的部分代码内容,我们可以看出这是一个用于执行分页查询的存储...
之前一直用SQL SERVER做项目,但是现在需要用到ORACLE,在网上找了几个都无法正常调用,因此自己写了一个,给大家一起分享,在写的过程中学习到了很多东西,同时也体会到了SQL SERVER和ORACLE中的异同点 在分页存储...
本文将深入探讨如何通过使用存储过程来实现高效的分页存储过程,特别是针对ASP.NET应用程序。 标题 "效率高的分页存储过程实现的分页" 提到的是一种优化数据检索的技术。在ASP.NET开发中,GridView控件是常用的数据...
### Server2005高效分页存储过程详解 在数据库应用开发中,高效地处理大量数据的查询结果是一项重要的技术需求。特别是在Web应用程序中,为了提高用户体验,避免服务器因加载大量数据而产生的性能问题,分页显示...