在ASP.NET开发中,分页功能是常见且重要的功能之一,通过使用存储过程实现分页,可以有效地提高数据检索的效率,本文将通过对一个ASP.NET分页存储过程实例的剖析,分享一些心得体会。
存储过程分页的基本原理
存储过程分页的基本原理是通过SQL语句中的
ROW_NUMBER()
函数对查询结果进行排序,并利用和子句来获取特定范围内的数据,这种方法可以减少客户端与服务器之间的数据传输量,提高应用性能。
实例剖析
以下是一个简单的ASP.NET分页存储过程实例,我们将通过这个实例来剖析其实现过程。
创建存储过程
我们需要在数据库中创建一个存储过程,该存储过程接受两个参数:页码和每页显示的记录数。
CREATE PROCEDURE GetPagedData@PageNumber INT,@Pagesize INTASBEGINSET NOCOUNT ON;SELECTROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,*FROMYourTableNameWHERE(YourWhereCondition)OFFSET (@PageNumber - 1) * @PageSize ROWSFETCH NEXT @PageSize ROWS ONLY;END
在这个例子中,
YourTableName
是你需要分页的表名,
YourWhereCondition
是你需要满足的查询条件。
在ASP.NET中调用存储过程
在ASP.NET中,你可以使用ADO.NET或Entity Framework来调用这个存储过程。
using (SqlConnection conn = new SqlConnection("YourConnectionString")){SqlCommand cmd = new SqlCommand("GetPagedData", conn);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddwithValue("@PageNumber", pageNumber);cmd.Parameters.AddWithValue("@PageSize", pageSize);conn.Open();SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){// 处理每条记录}}
心得体会
问题1:为什么使用和而不是关键字?
解答 :关键字只能用于返回固定数量的记录,而和可以返回一个范围内的记录,这使得分页更加灵活。
问题2:存储过程中的
ORDER BY (SELECT NULL)
有什么作用?
解答
:
ORDER BY (SELECT NULL)
是一个占位符,用于确保
ROW_NUMBER()
函数在排序时不会产生错误,由于
ROW_NUMBER()
函数本身不包含排序逻辑,所以需要一个排序依据,即使这个依据是随机的。
.net分层构架的设计文档
微软的pet shop 4.0 去csdn上下载 输入petshop 回车就有源码和文档 如果找不到 我发给你 ===================================== 再给你一篇文章看 本文不是从理论的角度来探讨三层架构,而是用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用。写本文的目的,不是为了说明自己的这个方法有多对,别人的肯定不对,而是希望给那些初学三层架构却不知从何入手的朋友提供一点帮助。因为网上的文章,大多是注重理论的介绍,而忽略了具体的实践应用,或者有示例但讲得不透彻。导致看了之后,理论上又学习了一遍,但还是不知道代码怎么写。所以想从这个方面入手写一下,让从来没做过三层架构的初学者也能照猫画虎,写出代码来。文章表述的是笔者个人对三层架构的认识,肯定有许多不足的地方,欢迎大家指正,小弟也会根据反馈来修改这篇文章。文中的代码是伪代码,仅用来阐明思路。正文:一提三层架构,大家都知道是表现层(UI),业务逻辑层(BLL)和数据访问层(DAL),而且每层如何细分也都有很多的方法。但具体代码怎么写,到底那些文件算在哪一层,却是模模糊糊的。下面用一个简单的例子来带领大家实战三层架构的项目,这个例子只有一个功能,就是用户的简单管理。首先建立一个空白解决方案,添加如下项目及文件1、添加 Web application项目,命名为UI,新建Web Form类型文件(含)2、添加ClassLibrary项目,命名为BLL,新建Class类型文件3、添加ClassLibrary项目,命名为DAL,新建Class类型文件。添加SQLHelper引用。(这个是微软的数据访问类,也可以不用,直接编写所有的数据访问代码。我一般用自己写的数据访问类DataAccessHelper )。4、添加ClassLibrary项目,命名为model,新建Class类型文件5、添加ClassLibrary项目,命名为IDAL,新建Interface类型文件6、添加ClassLibrary项目,命名为ClassFactory相信大家已经看出来了,这个和Petshop的示例没什么区别,而且更简单,因为在下也是通过Petshop学习三层架构的。但一些朋友对于这几个项目所处的层次,以及它们之间的关系,可能比较模糊,这里逐个说明一下:1、和 这两个文件(以及文件所属的项目,下面也是如此,不再重复强调了)都属于表现层部分。比较好理解,因为它就是显示页面了。有些人觉得不应该算,而是要划到业务逻辑层中去。如果不做分层的话,那么让来处理业务逻辑,甚至操作数据库都没什么问题,但是做分层的话,这样就不应该了。在分层结构中,仅应该处理与显示有关的内容,其它部分都不应该涉及。举例:我们实现用列表方式显示用户的功能,那么提取信息的工作是由BLL来做的,UI(本例中是)调用BLL得到UserInfo后,通过代码绑定到的数据控件上,就实现了列表的显示。在此过程中对UI没有起到什么作用,仅是用来传递数据,而且因为实际编码中大部分情况都是如此的实现,所以使有些人觉得不应该算UI,而应该并入BLL负责逻辑处理。继续往下看,这时提出了一个新需求,要求在每个用户的前面加一个图标,生动地表现出用户的性别,而且不满18岁的用儿童图标表示。这个需求的实现,就轮到来做了,这种情况下才算有了真正的用途。2、 添加如下方法:public IList
联想G450笔记本电脑的刻录光驱需要驱动程序吗?
不需要驱动!但你需要一个刻录软件。我经常用nero
发动机空气流量计损坏后的现象是什么
故障1 捷达20V怠速不稳,部分负荷冒黑烟,有时换挡熄火。 检测过程:电脑内故障存储为空气流量计故障,但具体检测空气流量计电路时情况正常,更换空气流量计故障依旧,更换电脑后冷车正常,热车后故障依旧。 这时(用V.A.G1551故障诊断仪)再检测全车数据块,发现08数据组第7组第2区氧传感器电压变化频率慢。 正常变化每分钟20—30次,此时平均只有5—6次,说明氧传感器有故障。 维修结果:更换氧传感器,故障排除。 故障分析:此故障在于电脑内出现空气流量计信号与氧传感器信号矛盾,实际上是由于氧传感器失准,造成误调节,但从结果上看和空气流量计信号严重超差,造成氧传感器无法调整是一样的。 这里电脑优先考虑重要信号即空气流量计信号,只要我们能正确理解电脑的故障提示,问题就不难解决。 这个故障可理解为:从与空气流量计有关的故障,我们就很容易联想到氧传感器。 这就需要我们对其原理多了解一些,去对应不同情况。 故障2 捷达20V发动机怠速不稳、行驶无力并冒黑烟,做一次基本设定故障排除,但几天后又出现反复。 检测过程:电脑显示空气流量计临时性故障,更换空气流量计故障依旧,更换电脑故障依旧,用V.A.G1551故障诊断仪,再检测全车数据块正常,但具体检测空气流量计电路,发现空气流量计信号线电阻值偏大,正常值为0.5Ω,而实际值达3.6Ω。 真正原因是线路有虚接,处理线束插头,故障被排除。 故障分析:这种故障属于特别故障,但是在实际维修中却经常遇到,而且解决起来相对困难。 是时我们可以发现一个问题:空气流量计信号线位于插头的转角处,在生产过程中容易产生位置故障,造成接触不良。 在其他的插头中,相应位置也值得我们注意。 另外,空气流量计作为一个至关重要的构件,其故障率是很低的,当电脑提示其故障时,我们要慎重对待。 故障3 一辆红旗CA7220E轿车在行驶中突然出现间断性熄火,继而完全熄火。 对该车进行检查,发现该车能迅速起动,只是起动后无论踩下油门或松油门均很快熄火,但此时仪表板上的故障报警灯却不闪烁报警。 用V.A.G1551故障诊断仪检查,故障诊断仪显示无故障码。 在检查时还发现,当拔下空气流量传感器接线插头时,发动机起动后却能运行,但怠速不稳,加速不良且仪表盘上的故障灯闪烁报警。 原来,该电喷系统的电脑自诊断功能只能识别空气流量传感器线路是否短路或断路故障,却不能识别空气流量传感器的错误信号,致使发动机起动后即熄火。 当拔下传感器接线插头时,由于电脑可识别此人为故障,电脑便自动用节气门位置信号代替空气流量信号,使系统进入自救回家的跛行状态。 因此,发动机能运行,但运转性能不好,故障灯也报警。 红旗CA7220E采用热膜式空气流量传感器。 1.空气流量传感器的性能测试 将点火开关置于“OFF”,拆下空气流量传感器,将传感器插头3号与12V蓄电池正极连接,4号与蓄电池负极连接,用数字万用表测量插头2号与1号端子间的电压(其读数就为0.03V)。 用450 W电吹风紧靠传感器入口向传感器内吹风(用冷风挡),1号、2号端子之间的电压应为2.3±0.1V。 将吹风机缓慢向后移动,以上电压值应逐渐减少。 当吹风口距离与传感器入口相距200mm时,电压应为1.5±0.1V。 若测量的结果与上述值差距较大,应更换传感器。 2.空气流量传感器的供电检测 将点火开关置于“ON”,传感器线路插座3号端子与1号端子间的电压读数应为蓄电池的供电电压。 若无电压或读数偏差太大,应按电路图检查线路。 检查线路时,将点火开关置“OFF”,拔下ECU插座,用万用表测量ECU插座14号端子与传感器2号端子、ECU插座26号端子与传感器插座4号端子间的电阻,均应小于1.50,而ECU插座14号端子与传感器插座4号端子与3号端子间的电阻值应为∞Ω,否则应按电路查线。 总结以上故障实例,我感觉到,作为专业的维修技术人员,在熟练使用专用故障解码器和阅读器的同时,更要深入理解各系统各部件间的互联性与相关性,这样有利于准确快捷地发现故障,排除故障。














发表评论