导读:
先看看运用:
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
{
///
/// members 的摘要说明。
///
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);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
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
{
///
/// PagerSql 的摘要说明
///
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
先看看运用:
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
{
///
/// members 的摘要说明。
///
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);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
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
{
///
/// PagerSql 的摘要说明
///
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