仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2589|回复: 20
打印 上一主题 下一主题

[学习教程] ASP教程之进步ADO功能的优异经历

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:35:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧ado|功能   1、概述

“功能”这一术语有着几种分歧的、差别奇妙的寄义。当人们谈到某个器材功能几何好时,他们想要表达的意思能够就是在必定的工夫以内它完成了几何任务。例如,一特性能好的动员机运转起来更不乱,发生的动力更壮大。关于开辟小组,你一样也能够使用这个判别尺度:一特性能好的开辟小组任务时对照宁静,并且可以临盆出大批高质量的代码。对我来讲,功能最少意味着两件工作――我的代码运转起来有多好,我的开辟小组和我自己任务效力怎样。不管哪一方面,本文引见的技能都将起到必定的匡助感化:匡助你更快地编写代码,匡助你编写更快的代码――宁静地完成这一切,削减如许那样的毛病。本文引见的技能次要面向ADO,出格是若何经由过程ADO会见SQL Server。但与此同时,我还将触及一些合用局限更广的COM技能,它们合用于你所编写的一切Visual Basic代码。

为了懂得从哪些SQL Server数据会见代码编写手艺、哪些系统、哪些开辟习气可以失掉最好的功能,我已花了很多工夫。一些情形下,关于使用的全体功能来讲,单一的手艺意义很小,除非咱们经由过程轮回将功能的改良水平成倍缩小。例如,在一个客户机/办事器使用中,当咱们不是经由过程指定ODBC数据源(DSN)的体例毗连数据库时,大约可以节俭一到二秒的工夫。关于使用全体的合用性或功能来讲,这局部节俭的工夫所发生的影响很小。然而,假如咱们在一个两头层组件上使用这类手艺,这个组件每分钟(或每小时,天天)都要创立和封闭数据库毗连数百(乃至数千)次,那末,这类手艺将明显地影响体系的功能体现。因而,关于我在这里会商的每种手艺,请务必思索这个倍数因子――即,在必定的工夫周期内,你的体系将履行统一段代码几何次。

当你入手下手追求改善功能的计划时,请思索一下你的使用(组件,或是ASP代码)大部分的守候和处置工夫花在甚么中央。假如你发明使用法式把大批的工夫花在守候Open或Execute办法履行完成,那末,你应当仔细地反省一下办事器真个查询战略。包含ADO在内,一切的数据会见接口守候查询了局的工夫都不异。例如,假如你有一个查询,SQL Server需求20秒才干完成它,不管用来履行该查询的是甚么接口,没有一种接口可以比其他接口以更快的速度前往了局。固然有些接口翻开毗连的速度对照快,有些接口处置了局集的速度对照快,但没有一种接口可以影响数据库引擎编译和履行查询的速度。因而,假如你的查询具有太高的“应战性”――例如你没有对索引停止优化,你没有利用存储进程,办事器负载太重,或你请求前往的纪录数目太多――那末,世界上没有一种ADO手艺可以匡助你进步功能。除非你处理了这些根基的查扣问题,不然没有一种功能调剂手艺可以明显地改良全体功能。SQL Server的Query Analyzer是一个剖析查询功能的优异东西。它可以用图形的体例显示查询的履行进程,并对改善功能的办法提出建议。

假如你可以确信查询具有较高的效力,那末,你可使用本文引见的手艺进一步伐整ADO代码的功能。这里引见的技能将从各个方面匡助你简化和改善ADO编程,包含:创立和保护毗连,机关和提交履行速度更快的查询,进步处置查询了局的效力,等等。

2、创立毗连

在一个客户机/办事器使用中,咱们可以用好几种办法把创立和初始化数据库毗连所需求的工夫埋没起来,使得使用法式既可以翻开毗连,又不需求用户守候使用法式启动。起首,咱们可以测验考试异步毗连。利用异步毗连时,ADO启动毗连操作以后,不守候毗连完成绩把掌握权前往给使用法式――如许,使用法式就可以够接着履行大部分初始化操作,以更快的速度完成form_load事务处置。假如封闭偏重新创立毗连的工夫小于毗连池释放毗连的工夫,那末这个毗连实践上是即时的。但在很多情形下(出格是用户数目不多时),让毗连坚持翻开形态更具有实际意义。在两头层组件或ASP页面外部,假如数据库查询屡次反复呈现,我建议你让Connection对象坚持翻开形态。

别的一个改善毗连功能的举措是,防止利用带有DSN的ODBC。在Microsoft,ODBC已转入了Quick Fix Engineering(QFE,疾速修缮工程)形态,它意味着:除非发明严重BUG,该公司将不再在ODBC或它的驱动法式上花工夫。别的,思索功能和安排成绩时,ODBC DSN也是一个必需存眷的成绩。DSN必需装置到客户体系上,请求停止注册表查找,与OLE DB毗连比拟,它创立毗连所需求的工夫更长――出格是当你用直接编码的体例指定ConnectionString时,这一点特别凸起。从实践后果来看,防止利用DSN下降的体系开支很无限:假如完整作废毗连创立进程,关于每一个毗连,你或许可以剩下二到五秒工夫(假定数据库毗连池中已没有毗连)。但是,假如你的使用法式需求频仍地创立毗连,节俭的工夫累计起来就很可不雅了。

创立数据库毗连的时分,你要选择一个数据供应者。Microsoft建议咱们利用OLE DB供应者替换默许的ODBC供应者。对照最新的OLE DB当地供应者和功效相似但较早的ODBC供应者,我感应前者使人不兴奋的不测之事较少。但不管是哪一种情形,你都应当在决意利用某个新的供应者之前对使用停止完全地测试――代码的功能、撑持的功效、行动体例都有能够产生变更。

在两头层和ASP中,在坚持毗连翻开的情形下,咱们不克不及(从理论来看)创立出可伸缩的组件――最少在屡次挪用之间是如许的。普通地,当IIS援用和释放组件、ASP页面的实例时,组件和ASP页面被频仍地装入、抛弃。因为基于ADO的代码每次履行时都必需创立、利用、释放数据库毗连,最小化毗连庞杂水平的战略对功能的进步水平到达了可分明丈量的水平。在这些情况下,关于咱们毗连数据库的速度来讲,毗连/会话池有侧重要的意义。假如你为Command对象的ConnectionString属性指定适合的值(即,每次利用一样的办事器、初始目次、登录ID和其他参数),那末,毗连已翻开且处于可用形态的时机很大。假如毗连池中可以找到婚配的毗连,毗连(或从头毗连)的工夫将接近0(凡是小于250 ms)。

但是,假如ADO(或VB)代码不释放Connection对象,或,咱们在分歧的实例之间更换了ConnectionString,OLE DB必需每次创立一个新的毗连。假如呈现了这类情形,咱们将很快耗尽毗连池内可用毗连的数目。要确保毗连被释放,咱们必需在封闭毗连以后把Connection对象设置为Nothing。别的,不要在Recordset Open办法中利用ConnectionString,而是以自力的体例翻开Connection对象;如许,当咱们要封闭Connection对象和要把它设置成Nothing的时分,援用它就很便利了。

3、机关和提交查询

在机关查询的时分,要弄清晰为何必需这么做、为何不克不及那末做是一个很庞杂的成绩。但是,一些根基的指点方针可以让机关高效查询的进程加倍流利、轻松。普通地,你不该该让查询华侈办事器工夫。上面几个技能可以匡助你机关出更好、更高效的查询。

不要强迫SQL Server每次履行查询的时分从头编译和机关查询履行企图。防止这类反复操作的一种复杂办法是利用带有参数的存储进程。注重尽可能不要利用ADO Command对象的Prepare属性――有时它不克不及准确任务。假如利用存储进程,你还可以经由过程消弭不用要的“受影响行数”前往值进一步进步ADO功能――只需在存储过程当中到场SET NOCOUNT ON就能够了。

尽可能削减与办事器的通讯次数。假如你有几个相干的操作要履行,请把它们兼并为一个存储进程,或是一个可以在办事器上作为剧本履行的复合查询。防止利用办法(好比Refresh)和不恰当的Parameters纠合援用,它们会强迫ADO增添额定的办事器通讯进程。

在客户机/办事器使用中,只机关Command对象一次,而不是每次利用Command对象的时分从头机关。你可以从头设置Command的参数值,然后在需求时履行它。

当查询前往的不是一个纪录集时,确保利用了adExecuteNoRecords选项,告知ADO超出一切那些用来吸收和机关纪录集(Recordset格局)的代码。你可以把adExecuteNoRecords选项传递给Execute办法,或把它作为Command的选项。

履行前往复杂纪录集的存储进程时,不要利用Command对象。一切的存储进程(和Command对象)可以作为Connection对象的COM办法呈现。让存储进程作为Connection对象的办法呈现有着明显的功能优势,同时它也简化了代码。虽然这类手艺关于那些有Return Status值或Output参数的存储进程没有甚么匡助,但关于举措查询(INSERT、DELETE等)和那些前往一个或多个纪录的查询来讲,这类手艺很有效。把存储进程作为Connection的办法以后,你可以用办法参数的模式传入存储进程的输出参数;假如挪用存储进程前往了一个纪录集,你可以经由过程办法挪用中最初一个参数援用该Recordset。例如,上面的ADO语句履行一个名为“Fred”的存储进程,Fred存储进程有两个输出参数,前往一个Recordset:

MyConnection.Fred "InputArg1", 2, myRecordset


编写代码的时分,不要寄但愿于VB的主动完胜利能会把存储进程或Command对象名字视为正当的Connection对象的办法。在正式运转之前,COM不会解析这类名字。

除非相对需要,不然不要前往纪录集。当正在履行的查询前往纪录时,ADO就会机关一个Recordset对象。机关Recordset对象的开支很大,因而你应当尽可能防止利用Recordset对象。注重有时分履行查询固然前往了局,但不是前往纪录。例如,你可以经由过程Return Status参数前往整数值。别的,你可以前往Output参数来替换需求机关Recordset对象的纪录集,SQL Server答应前往的Output参数多达1000个。

只需有能够,请用举措查询(INSERT,UPDATE,DELETE和履行这些操作的存储进程)替换可更新的Recordset游标。此时,你应当利用Execute办法和它的adExecuteNoRecords选项,确保ADO可以晓得查询不需求机关Recordset对象。

除非需要,不然不要恳求办事器停止排序。大多半情形下,关于一个过度巨细的Recordset对象,当它被发送到客户端以后,排序速度将更快。别的,假如让ADO客户法式排序Recordset中的纪录,则客户使用法式可以依照用户选择的次第排序,从而进步了天真性。

在编写查询之前懂得索引的布局。创立适合的索引,调剂查询的语法以使用这些索引,你将可以进步纪录提取的速度。Query Analyzer可以匡助你决意是不是有需要添加更多的索引。

不要一次性前往太多的纪录。良多时分,容量太大的纪录会议严重地影呼应用法式的功能。只前往那些以后你需求的纪录,假如客户法式需求更多的纪录</p>  ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。Apache ASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。
柔情似水 该用户已被删除
沙发
发表于 2015-2-4 03:06:36 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
爱飞 该用户已被删除
板凳
发表于 2015-2-7 14:57:02 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
小魔女 该用户已被删除
地板
发表于 2015-2-13 00:55:31 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
飘灵儿 该用户已被删除
5#
 楼主| 发表于 2015-3-3 11:56:32 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
谁可相欹 该用户已被删除
6#
发表于 2015-3-5 23:05:03 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-6 09:09:37 | 只看该作者
那么,ASP.Net有哪些改进呢?
因胸联盟 该用户已被删除
8#
发表于 2015-3-11 04:55:40 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
若天明 该用户已被删除
9#
发表于 2015-3-17 19:17:16 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-17 20:10:42 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
admin 该用户已被删除
11#
发表于 2015-3-25 00:02:41 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
莫相离 该用户已被删除
12#
发表于 2015-3-31 22:49:39 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
兰色精灵 该用户已被删除
13#
发表于 2015-4-1 00:11:39 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
再现理想 该用户已被删除
14#
发表于 2015-4-1 06:38:35 | 只看该作者
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
乐观 该用户已被删除
15#
发表于 2015-4-9 07:36:47 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
愤怒的大鸟 该用户已被删除
16#
发表于 2015-4-11 06:11:29 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
精灵巫婆 该用户已被删除
17#
发表于 2015-4-18 05:47:19 | 只看该作者
从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
18#
发表于 2015-4-24 00:58:10 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
冷月葬花魂 该用户已被删除
19#
发表于 2015-4-27 09:02:57 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
若相依 该用户已被删除
20#
发表于 2015-5-1 07:09:02 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表