网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.asp.net 2.0中的URL重写以及urlM.
.用完HttpWebResponse时别忘了调用.
.通过改善架构来提高 ASP.Net 应用.
.在asp.net中实现会话状态基础.
.asp.net身份验证(登录控件),基于.
.asp.net ajax 使用updatepanel进.
.未能加载文件或程序集Microsoft..
.关于用ASP.Net识别远程主机服务器.
.Asp.Net、Ado.net 数据库编程超级.
.用.net静态变量取代Application,.
.在atlas里面的UpdatePanel控件中.
.在asp.net中操作sql server数据库.
.ASP.NET模拟其他用户进行关机.
.ASP.NET 2.0中DataTable小兵变大.
.下载文件出现提示框或者直接显示.
.Object/DataSet Relational Mapp.
.asp.net项目运行的权限问题.
.ASP.NET中为DataGrid添加单选框.
..Net中常见问题及解决方法归类.
.ASP.NET2.0数据库入门之常见错误.

在存储过程中实现分页

发表日期:2006-9-20


     我不是一个很有经验的程序员,在做项目的过程中会遇到很多的问题,在数据库中使用分页就是我做项目中遇到的一个问题.我从网上查了很多资料,有很多种方法.但我觉的创建临时数据表是最简单的方法,在我做Membership扩展时发现原来微软也是这样用的,你可一随便打开一个Membership的存储过程看看.
     说了再多也没用,只要看看代码就清楚了,呵呵.
    
 1CREATE PROCEDURE dbo.CreateSimple
 2(
 3 @PageIndex int,
 4 @PageSize int
 5)
 6AS
 7BEGIN
 8 --定义三个变量:
 9 -- @PageLowerBound :所取出记录的下限.
10 -- @PageUpperBound: 所要取出记录的上限.
11 -- @TotalRecords: 返回记录总数,主要用于页面的计算.
12 DECLARE @PageLowerBound int
13 DECLARE @PageUpperBound int
14 DECLARE @TotalRecords int
15
16 --计算上下限的值.
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--创建临时表:
21--IndexId是标识,自动增长1;
22--SimpleId由数据表[Simple]填充;
23 CREATE TABLE #PageIndexForSimple
24 (
25  IndexId int identity(0,1) NOT NULL,
26  SimpleId int
27 )
28--填充临时表
29  INSERT INTO #PageIndexForSimple(SimpleId)
30  SELECT s.[SimpleId]
31  FROM [Simple] s
32  --这里可以加WHERE condition和ODER BY语句
33 
34  --取得记录总数,其实影响行数就是记录总数
35  SELECT @TotalRecords=@@ROWCOUNT
36
37  --获取我们所要的记录.
38  SELECT s.*
39  FROM [Simple] s,#PageIndexForSimple p
40  WHERE s.[SimpleId]=p.[SimpleId]
41            AND p.[IndexId]>=@PageLowerBound
42            AND P.[IndexId]<=@PageUpperBound
43  ORDER BY s.[Simple]
44
45   --返回记录总数.
46   RETURE @TotalRecords
47END      由上面的注释就能看懂了,呵呵,既然写到这里也把程序的代码写出来:
 1Public List<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
 2  List<Simple> entity=new List<Simple>();
 3  SqlParameter[]param=new SqlParameter[]{
 4     new SqlParameter("@PageIndex",SqlDbType.Int),
 5     new SqlParameter("@PageSize",SqlDbType.Int),
 6   new SqlParameter("@ReturnValue",SqlDbType.Int),
 7 };
 8  param[0].Value=pageIndex;
 9  param[1].Value=pageSize;
10  param[2].Direction = ParameterDirection.ReturnValue;
11  SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
12  While(reader.Read()){
13   entity.Add(GetSimpleEntity(reader))
14  }
15  reader.Close();
16  try{
17       totalRecords=(int)param[2].Value;
18  }catch{}
19  return entity;
20}    上面的一些函数是自己写的:
     SqlHelper类:简化数据库查询类.
    GetSimpleEntity(SqlDataReader reader):由于经常在项目中会用到好基础实体类的获取,所以单独写一个私有函数,以便重用;
    值得注意的是获取总的记录数时可能类型为DbNull而导致错误.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html
上一篇:写个偷全国公交数据库的程序 人气:5411
下一篇:aspnet_wp.exe could not be started 人气:5155
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐