首页 > 语言 > 关键词 > ASP.NET最新资讯 > 正文

浅述asp.net海量分页数据存储过程

2011-05-04 08:38 · 稿源:博客园

数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。本文结合ASP.NET,详细给出了两种ASP.NET海量分页数据存储的技术。

存储过程1

  1. CREATE PROCEDURE pagination   
  2. @tblName varchar(255), -- 表名   
  3. @strGetFields varchar(1000) = '*'-- 需要返回的列   
  4. @fldName varchar(255)=''-- 排序的字段名   
  5. @PageSize int , -- 页尺寸   
  6. @PageIndex int-- 页码   
  7. @doCount bit , -- 返回记录总数, 非 0 值则返回   
  8. @OrderType bit , -- 设置排序类型, 非 0 值则降序   
  9. @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)   
  10. AS   
  11. declare @strSQL varchar(5000) -- 主语句   
  12. declare @strTmp varchar(110) -- 临时变量   
  13. declare @strOrder varchar(400) -- 排序类型   
  14.  
  15. if @doCount != 0   
  16. begin   
  17. if @strWhere !=''   
  18. set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere   
  19. else   
  20. set @strSQL = "select count(*) as Total from [" + @tblName + "]"   
  21. end   
  22. --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况   
  23. else   
  24. begin   
  25.  
  26. if @OrderType != 0   
  27. begin   
  28. set @strTmp = "<(select min"   
  29. set @strOrder = " order by [" + @fldName +"] desc"   
  30. --如果@OrderType不是0,就执行降序,这句很重要!   
  31. end   
  32. else   
  33. begin   
  34. set @strTmp = ">(select max"   
  35. set @strOrder = " order by [" + @fldName +"] asc"   
  36. end   
  37.  
  38. if @PageIndex = 1   
  39. begin   
  40. if @strWhere != ''   
  41. set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder   
  42. else   
  43. set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder   
  44. --如果是第一页就执行以上代码,这样会加快执行速度   
  45. end   
  46. else   
  47. begin   
  48. --以下代码赋予了@strSQL以真正执行的SQL代码   
  49. set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["   
  50. + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder   
  51.  
  52. if @strWhere != ''   
  53. set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["   
  54. + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["   
  55. + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["   
  56. + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "   
  57. + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder   
  58. end   
  59. end   
  60. exec (@strSQL)  
  61. GO  
  62.  
  63. 调用的程序(为了通用性,我写了一个方法,大家可以提意见,也可以对其进行修改,多多交换意见,共同进步)  
  64.   private static DataSet GetCustomersData(string tblName, string strGetFields,string fldName, int PageSize, int PageIndex, int doCount, int OrderType, string strWhere)  
  65. {  
  66.     string connString = ConfigurationSettings.AppSettings["connstr"];  
  67.     SqlConnection conn = new SqlConnection(connString);  
  68.     SqlCommand comm = new SqlCommand("pagination3", conn);  
  69.  
  70.     comm.Parameters.Add(new SqlParameter("@tblName", SqlDbType.VarChar));//表名  
  71.     comm.Parameters[0].Value =tblName ;  
  72.     comm.Parameters.Add(new SqlParameter("@strGetFields", SqlDbType.VarChar));//返回的列  
  73.     comm.Parameters[1].Value = strGetFields;  
  74.     comm.Parameters.Add(new SqlParameter("@fldName", SqlDbType.VarChar));//排序的字段名  
  75.     comm.Parameters[2].Value = fldName;  
  76.     comm.Parameters.Add(new SqlParameter("@PageSize",SqlDbType.Int));//页尺寸  
  77.     comm.Parameters[3].Value = PageSize;  
  78.     comm.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int));//页码  
  79.     comm.Parameters[4].Value = PageIndex;  
  80.     comm.Parameters.Add(new SqlParameter("@doCount", SqlDbType.Int));//是否返回记录总数,0为不返回,1为返回  
  81.     comm.Parameters[5].Value = doCount;  
  82.     comm.Parameters.Add(new SqlParameter("@OrderType", SqlDbType.Int));//设置排序类型,0为升序,非0为降序  
  83.     comm.Parameters[6].Value = OrderType;  
  84.     comm.Parameters.Add(new SqlParameter("@strWhere", SqlDbType.VarChar));//where语句  
  85.     comm.Parameters[7].Value = strWhere;  
  86.     comm.CommandType = CommandType.StoredProcedure;  
  87.     SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);  
  88.     DataSet ds = new DataSet();  
  89.     dataAdapter.Fill(ds);  
  90.     return ds;  

存储过程2

  1. CREATE PROCEDURE [dbo].[GetRecordFromPage]   
  2.     @SelectList            VARCHAR(2000),    --欲选择字段列表  
  3.     @TableSource        VARCHAR(100),    --表名或视图表   
  4.     @SearchCondition    VARCHAR(2000),    --查询条件  
  5.     @OrderExpression    VARCHAR(1000),    --排序表达式  
  6.     @PageIndex            INT = 1,        --页号,从0开始  
  7.     @PageSize            INT = 10        --页尺寸  
  8. AS   
  9. BEGIN 
  10.     IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList)) = '' 
  11.     BEGIN 
  12.         SET @SelectList = '*' 
  13.     END 
  14.     PRINT @SelectList  
  15.       
  16.     SET @SearchCondition = ISNULL(@SearchCondition,'')  
  17.     SET @SearchCondition = LTRIM(RTRIM(@SearchCondition))  
  18.     IF @SearchCondition <> '' 
  19.     BEGIN 
  20.         IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE' 
  21.         BEGIN 
  22.             SET @SearchCondition = 'WHERE ' + @SearchCondition  
  23.         END 
  24.     END 
  25.     PRINT @SearchCondition  
  26.  
  27.     SET @OrderExpression = ISNULL(@OrderExpression,'')  
  28.     SET @OrderExpression = LTRIM(RTRIM(@OrderExpression))  
  29.     IF @OrderExpression <> '' 
  30.     BEGIN 
  31.         IF UPPER(SUBSTRING(@OrderExpression,1,5)) <> 'WHERE' 
  32.         BEGIN 
  33.             SET @OrderExpression = 'ORDER BY ' + @OrderExpression  
  34.         END 
  35.     END 
  36.     PRINT @OrderExpression  
  37.  
  38.     IF @PageIndex IS NULL OR @PageIndex < 1  
  39.     BEGIN 
  40.         SET @PageIndex = 1  
  41.     END 
  42.     PRINT @PageIndex  
  43.     IF @PageSize IS NULL OR @PageSize < 1  
  44.     BEGIN 
  45.         SET @PageSize = 10  
  46.     END 
  47.     PRINT  @PageSize  
  48.  
  49.     DECLARE @SqlQuery VARCHAR(4000)  
  50.  
  51.     SET @SqlQuery='SELECT '+@SelectList+',RowNumber   
  52.     FROM   
  53.         (SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +'AS RowNumber   
  54.           FROM '+@TableSource+' '+ @SearchCondition +'AS RowNumberTableSource   
  55.     WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)   
  56.     + ' AND ' +   
  57.     CAST((@PageIndex * @PageSize) AS VARCHAR)   
  58. --    ORDER BY ' + @OrderExpression  
  59.     PRINT @SqlQuery  
  60.     SET NOCOUNT ON 
  61.     EXECUTE(@SqlQuery)  
  62.     SET NOCOUNT OFF 
  63.    
  64.     RETURN @@RowCount  
  65. END 

原文链接:https://www.cnblogs.com/wdy6279/archive/2011/04/29/2032448.html

  • 相关推荐
  • 大家在看
  • 干细胞存储越来越普遍,你是因为什么选择了解干细胞存储?

    5月 30 日,菲菲正在市妇幼做产检,丈夫全程陪着她,“每次产检,我老公都请假全程陪着”,说起这个,菲菲满脸都是甜蜜的笑容。菲菲的丈夫是当地重点中学的一名老师,菲菲自己也是一位小学老师。刚怀孕不久,菲菲就与丈夫商量,决定在博雅干细胞库存储即将出生的宝宝的胎盘干细胞。菲菲说,还是学生时代的时候,那会儿都还没有恋爱,她就在一部电影中看到有一个患绝症孩子因为干细胞而获救的故事,因为新的医疗科技的神奇而深受震?

  • 小萌新们看过来,iHerb海量优惠不容错过~

    金秋十月购物忙,iHerb平台也是好礼送不断,现在更是重磅推出两大利好:首先是保健品、美容产品和母婴用品的 5 折大优惠,其次作为银联用户,更是可以享受买满返现的优惠!这么实打实的福利,赶快过来看看吧吧~农行、建行、交行、招行、浦发、平安、兴业、东亚、光大、民生和华夏银行的银联跨境返现卡持卡人可要听好了:在 10 月 1 日0: 00 至 10 月 31 日23:00(北京时间)期间,只要在指定的境外线上和线下商户)单笔消费实付金额

  • Netflix扩大英国业务 将拓展办公区

    DoNews10月10日消息(记者 翟继茹)10日,彭博社援引知情人士消息称,Netflix计划将伦敦的办公室扩大两倍,并搬进这一新的英国总部。报道称,这一新大楼占地87000平方英尺,曾属于伯纳斯街(Berners Street)地产。目前,Netflix在英国有近300名员工。Netflix表示,“作为我们承诺的一部分,很高兴我们能拓展英国业务。”(完)

  • 5G购机补贴海量来袭 京东手机11.11福利提前享

    每逢11. 11 购物狂欢季,市场都会迎来手机焕新高峰,史无前例的空前钜惠,让很多消费者选择锁定这一天购买心仪机型。作为消费者线上线下购买手机的首选平台,京东手机致力于满足消费者多元化的购机需求,打造手机零售行业标杆,在11. 11 来临之际,京东手机体验进一步升级,为消费者带来了“现货预售”、“5G购机补贴”以及多达 43 项的售前售中售后服务,让更多消费者在11. 11 收获愉悦、满意的购机体验。现货直发零等待 “预售”

  • 联想时空馆,大闹时空,海量爱奇艺会员卡免费领!

    穿越的大门打开,你会选择回到三百年前的清朝当阿哥,还是回到一千两百年前的唐朝欣赏那开元盛世,亦或是回到两千年前的汉朝封狼居胥?如果让你穿越时允许你带一件当代科技产品,你会选择什么呢? 今天联想时空馆就带你穿越回古代,看看如果联想新一代PC产品出现在古代,是否可以重写历史,颠覆古今。打开微信,搜索联想时空馆小程序,即刻领取惊喜好礼。现在你动动指尖,就能瞬间穿越古代。带你看看不一样的历史名人。关公遇到联?

  • 为云而生,青云科技分布式存储全线升级!

    今天的故事要从青云QingCloud 分布式存储产品——QingStor的发展历程开始讲起。2015年,青云QingCloud发布了青立方超融合和QingStor企业级分布式存储,并迎来了第一款产品——QingStor对象存储。2017年,QingStor NeonSAN块存储正式发布,强调高性能和低延时,支持真正的水平扩展,主要用于企业核心业务等基于块存储的应用。2018年,青云QingCloud补全了存储产品线,发布了QingStor文件存储,其底层采用了QingStor NeonSAN的核心技

  • Netflix停止向美国观众提供免费试用

    全球最大的视频流媒体Netflix日前宣布,已经停止在美国提供免费试用服务。

  • Netflix宣布取消30天免费试用服务

    据外媒报道,接下来,用户要么完全支持Netflix要么完全退出,因为这家流媒体巨头已经取消了他们的免费试用服务。现在,用户必须要注册一个Netflix的套餐才行,不过该套餐没有合同约束,用户可以随时取消。

  • Filecoin上线在即,OKEx存储板块接棒DeFi引领新热点

    被热炒了 4 个多月的DeFi,相较于此前近乎直线的增长态势,终于还是放缓了脚步。DeFi进入冷静期后,Filecoin带动的存储板块概念却已经悄悄开始表演。9 月 28 日,受Filecoin主网即将上线的利好消息影响,存储板块集体上涨。STORJ单日上涨14.51%,LAMB上涨8.04%,SC上涨3.68%......而近日,随着Filecoin主网上线日子的临近,存储项目的呼声也是愈发高涨。等待 3 年,Filecoin终于要上线了定位是存储板块龙头级别的Filecoin,在多次?

  • Chrome 87 Beta加速放弃FTP 改进Cookie存储API

    继上周发布Chrome86之后,谷歌也同步上线了Chrome87Beta。考虑到视频会议应用的蓬勃发展,该公司为Chrome87Beta引入了新的界面,支持通过媒体控件来固定、旋转和放大摄像头画面。不过只有在获得用户的授权之后,网站才能启用这些功能。

  • iPhone12全系存储配置、外观配色曝光:焕然一新

    北京时间下周三凌晨 1 点( 10 月 14 日),苹果将举办线上新品活动,在iPad Air4 和iPad8 已经揭晓的前提下,此次活动的主角将完全落在iPhone12 上。

  • iPhone12系列存储容量公布 仍为64GB起够你用吗?

    近期有大量消息显示,苹果将在 10 月中旬再次召开新品发布会,正式发布全新的iPhone12 系列产品。有消息称,iPhone12 系列共有四款手机,而在 10 月新品发布会后,iPhone 12 mini以及iPhone12 等产品将率先与各位消费者见面。

  • 容声“生熟分储”系列冰箱新品发布,打造生熟存储“一周奇迹”

    纵观冰箱消费市场近年来的发展趋势,消费者在追求大容量、大空间冰箱的同时,对冰箱个性化储存功能的要求也日益凸显。冰箱生产企业纷纷发力,母婴、珍品、化妆品、红酒等专门分储区不断推出。 9 月 14 日,容声冰箱在西双版纳举办新品发布会,公布了"生熟分储"系列的新一代产品,在这一分储细分新领域占得了先机。囤积的食物都存储对了吗?容声冰箱科学生熟分储中国疾控中心流行病学首席专家吴尊友接受人民日报专访时表示,食物一?

  • 存储器巨头美光科技:华为是最大客户,已申请新供货许可证

    DoNews 9月30日消息(记者 程梦玲)据第一财经报道,美光科技总裁兼首席执行官桑杰 · 梅赫罗特拉在财报会上表示,9月14日公司停止了对华为的供货。华为约占美光当季销售额近10%,是其近年来最大客户。由于短时间在不同客户间调整供货能力有限,美光未来两季度营收将承压。桑杰指出,“美国商务部对华为的制裁对我们2021财年一季度产生重大负面影响,并在较小程度上对二季度营收产生负面影响。公司需要时间弥补损失的订单。”桑杰

  • 乘云而上的数据库,在数据中寻找确定性

    数据是信息建设之基「云优先」已经成为企业信息化建设的主旋律,「新基建」定义了云计算是基础设施也是操作系统。云计算由于在降本增效和弹性扩展等方面的优越性,越发受到企业青睐。在黑天鹅频现的 2020 年,企业面对的风险与挑战愈发严峻,企业间的竞争也十分激烈,如何在这些不确定中寻找确定性?答案是:深耕数据,升值业务,在数据中寻找确定性。利用云平台作为基础支撑,以数据驱动进行精细化运营,满足用户的多元化需求。而?

  • 三星云即将终止相册同步和存储服务 用户可迁移至微软OneDrive

    根据三星此前的公告,本次全球性的服务终止被划分为两组分开进行,第一组将在 10 月 5 日开始进入服务停止阶段,将于 2021 年 6 月 30 日正式关闭数据的下载支持。而大陆地区被包含在第二组之中, 12 月 1 日正式开始终止服务, 2021 年 8 月 31 日正式关闭数据下载支持。

  • 冰箱分区存储有了新定义!容声“生熟分储”系列冰箱直击健康生活痛点

    都知道切生菜的刀具和切熟食的刀具要分开,那么生肉和熟食的分区存储是不是也一样的道理?隔夜菜容易产生亚硝酸盐,那熟食存储如何解决这一问题?生肉存储营养容易流失,熟食放冰箱串味严重,有没有更好的解决方案?在 9 月 14 日容声举行的新品发布会上,这些问题都能找到一个共同的答案。全球第一台彻底解决熟食串味的冰箱、全球第一台可以抑制亚硝酸盐生成的冰箱,都是容声最新发布的"生熟分储"系列冰箱的新头衔,从中足以看到该系

  • Netflix宣布在美国停止30天免费试用:白嫖党们的噩梦

    据外媒报道,Netflix于本周二表示,已经停止在美国提供免费试用。在消息爆出后,Netflix方面的发言人证实了媒体的报道并表示:“我们正在研究在美国进行不同的营销推广,以吸引新会员,并给他们提供良好的Netflix体验”。

  • Netflix的财富密码:让用户疯狂增长,直至世界毁灭

    ​新冠疫情在全球的肆虐,促进了“宅家经济”的强势发展。根据英国市场研究公司Global Web Index发布的报告,自疫情暴发以来,超过80%的美国和英国用户表示,较之以往,他们在印刷媒介、广播电视特别是流媒体平台上消费了更多的内容。

  • 硬盘恢复数据技巧:硬盘坏了数据可以恢复吗?

    电脑硬盘是我们日常使用电脑的时候经常打交道的一个装置。电脑硬盘分为内存和外存,内存负责存储电脑系统装置和电脑中的程序运行工作,外存负责电脑文件数据存储工作,因此硬盘负载着一台电脑最重要的信息,一旦不小心格式化会造成很大的麻烦。那么电脑硬盘格式化了还能恢复吗?下面介绍的这个方法非常简单。一、硬盘格式化数据恢复方法第一步:首先我们需要一些工具类软件来协助我们恢复数据。打开浏览器搜索“嗨格式数据恢复大师

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议
  • 热门标签