《深入体验C_项目开发 - 在线留言簿系统.docx》由会员分享,可在线阅读,更多相关《深入体验C_项目开发 - 在线留言簿系统.docx(38页珍藏版)》请在课桌文档上搜索。
1、第2章在线留言簿系统当今网络应用随处可见,QQ、MSN、博客、微博、留言板、论坛随着热门生活节奏的加快,人们将更多地使用网络进行交流,而作为交流方式之一的在线留言簿系统更是深受人们的青睐。通过在线留言簿系统,可以实现身处世界各地的人们的在线交流。本章将讲解在线留言簿系统的运行流程,并通过具体的实例来讲解其具体的实现过程。2.1 第一个盈利项目无论你是一位IT菜鸟,还是职场中的程序高手,只要从事IT这一行业,就会发现这行很容易揽到私活。我在学生时代就给一些公司干过网页设计、图像处理等一些兼职,当然是给他们做下手。自从学习程序之后,我就一直想着做一个真正的项目,不但能赚到钱,而且还能让我的产品能被
2、客户所使用。现在回忆起来,我做的第一个真正的盈利项目应该是大四那年的在线留言簿系统。2.1.1 不速之客2005年12月1日,大雪纷飞风流倜傥的学生会主席CH来到了我们的宿舍。他的来意十分明确,学校官方网站准备升级,要增加一个在线留言簿系统供学生使用。学校想让学生来完成这个升级工作,这样不但节约开支,而且可以检验学生的实践能力。CH在得到这个消息后,第一时间想到了我们宿舍,因为华东区大学生计算机竞赛团体一等奖来自我们宿舍。有了学生会主席的大力举荐,加上我们的实力,这个项目就很自然地被我们拿下了。2.1.2 组建团队2005年12月2日,小雪飘飘虽然项目不大,我们还是组建了一个小团队,团队成员如
3、下。舍友A;一个来自偏远山区的孩子,家庭贫困。可能因为家庭的原因,酷爱学习,快成学习超人了。仅有的零花钱全都买了辅导书:PHPsJavaASPPhotOShop、DreamweaverC+Flash0最大优点是啥都懂,缺点是啥都不精通。项目的核心编码他是不能胜任了,但是其策划经验是最好的。任务:负责项目规划,撰写系统设计规划书。舍友B:父母是做生意的,最大的特点是有钱,大学四年花钱如流水。从小酷爱编程,在C语言和数据库领域有颇深的造诣。任务:负责文件概览工作。舍友C一个运动狂人,喜欢惊险刺激的户外运动,每天早晨去操场跑马拉松,冬天穿短裤上街,从不生病,目标是攀登珠峰。任务:负责搭建并设计数据库
4、。舍友D:一个普通城市家庭的孩子,戴着一副眼镜,文质彬彬。此人十分聪明,属于一看就会的类型,所以学习成绩很好。课余爱好广泛,喜欢看足球、踢足球。任务:负责留言系统的编码工作。我:目前还没有出人头地,充其量是IT界一只待飞的小鸟。任务:负责系统整体框架设计,协调项目中各个模块的进展,并设计数据库访问层。整个项目的具体操作流程是:项目规划一文件概览一搭建数据库一设计数据库访问层f编码实现。2.1.3 小会议2005年12月3日,晴今天我们召开了一个动员会议,并为未来项目的进展做了一个简单的规划。我们一致认为:本项目包括后台数据库的建立、维护以及前端应用程序的开发两个方面。应用程序的开发采用目前比较
5、流行的ADO数据库访问技术,并将每个数据库表的字段和操作封装到相应的类中,使应用程序的各个窗体都能够共享对表的操作,而不需要重复编码,使程序更加易于维护,从而将面向对象的程序设计思想成功地应用于应用程序设计中,这也是本系统的优势和特色,具体流程如图2-2所示。图2-2实现流程最后我做了一个简单的总结:“要开发一个在线留言簿系统,首先需要进行系统需求分析和总体设计,分析系统的使用对象和用户需求,设计系统的体系结构和数据库表结构,决定使用的开发工具和后台数据库,规划项目的开发进度等。”大家一致提议:A尽快作出规划书,后续工作将以规划书为基础进行扩展。2005年12月14日,晴空万里系统规划是一个项
6、目的基础,是任何项目的第一步工作。原来我做项目时,往往看到功能之后就忙不迭地新建工程,并进行编码。但是总是忽略了这样或那样的要求,到最后需要经过多次修改,造成了欲速则不达。这次我吸取了以前的教训,在前期阶段就进行了一丝不苟的分析。2.2 系统概述和总体设计2005年12月5日,上午,阳光明媚会议完成后,整个团队就兴奋地马上开始了具体工作。今天一大早,A就做出了项目规划书。整个规划书分为两个部分,分别是在线留言簿模块功能原理和在线留言簿系统构成模块。2005年12月5日,下午按照预先分配的任务,由A负责系统概述和总体设计,这是我们整个项目的第一步,能不能打响第一枪就靠他了。我深知A向来做事比较拖
7、沓,所以一开始就宣称会一直紧盯着他不放。他无奈之下,只好抽出一段时间将任务完成了。2.2.1 在线留言簿模块功能原理Web站点的在线留言簿系统的实现原理比较清晰明了,其主要操作是对数据库数据进行添加和删除操作。在其实现过程中,往往是根据系统的需求而进行不同功能模块的设置。在线留言簿模块的必备功能如下。(1)提供信息发布表单供用户发布新的留言。(2)将用户发布的留言添加到系统库中。(3)在页面内显示系统库中的留言数据。(4)对某条留言数据进行在线回复。(5)删除系统内不需要的留言。2.2.2 在线留言簿系统构成模块一个典型的在线留言簿系统构成模块如下。 信息发表模块:用户可以在系统上发布新的留言
8、信息。 信息显示模块:用户发布的留言信息能够在系统上显示。 留言回复模块:可以对用户发布的留言进行回复,以实现相互间的交互。 系统管理模块:站点管理员能够对发布的信息进行管理控制。上述应用模块的具体运行流程如图2-3所示。图2-3在线留言簿系统运行流程图通过前面的介绍,读者可初步了解在线留言簿模块的原理和具体的运行流程。在接下来的内容中,将通过一个具体的在线留言簿模块实例,向读者讲解个典型在线留言簿系统的具体设计流程。2005年12月7日,上午,晴空万里历时两天,A的系统规划工作大功告成,有了这个规划书,以后的工作就有目的性了。接下来,需要B马上规划出系统所需的项目文件,为后期的编码工作做好准
9、备。2.3 规划系统文件2005年12月7日,下午,雪花飘飘经过前面两天的忙碌,总算有了一点成果。经过总体构成模块分析后,接下来就可以根据各构成功能模块来规划系统实现文件了。规划项目文件的工作由B来完成,一下午的时间他就在VisualStudio2005中规划好了项目文件。2.3.1 规划文件2005年12月8日,上午,阳光明媚今天是个好天气,我的心情也充满了期待。在这个美好的日子里,B在网上光顾了很多留言簿系统,并且发表了多个留言信息。根据总结的模块功能和规划的结构图,B规划出了整个项目的实现文件,具体说明如下。 系统配置文件:功能是对项目程序进行总体配置。 样式设置模块:功能是设置系统文件
10、的显示样式。 数据库文件:功能是搭建系统数据库平台,保存系统的登录数据。 留言簿列表文件:功能是将系统内的留言信息以列表样式显示出来。 发布留言模块:功能是向系统内添加新的留言数据。 留言管理页面:功能是删除系统内部需要的留言数据。2.3.2 选择我的武器2005年12月8日,下午,工具的困惑在此,B准备使用当前最新的VisualStudio2005,预期规划的各个文件在VisualStudio-u00田田国目-31三-2005解决方案资源管理器中的效果如图2-4所示。Pttp.lc*lkxtlin7tTBinlAjtxSrvie.sax四Jtnlispx国Kaifu.spx同Itetpdll
11、1.etvewwdFen.px1.etvvordPatspx.cs,1.ivyaa白三fic-iYgXMMtpx二?视用2三a-jSStflE图2-4预期规划的项目文件2.4 数据库设计本项目系统的开发主要包括后台数据库的建立、维护以及前端应用程序的开发两个方面。数据库设计是在线留言簿系统设计开发的一个重要组成部分。2.4.1 后台数据库及数据库访问接口的选择2005年12月9日,又见雪花,选择数据库数据库工作由C来完成,C对我们的建议为:开发数据库管理信息系统需要选择后台数据库和相应的数据库访问接口。后台数据库的选择需要考虑用户需求、系统功能和性能要求等因素。考虑到系统所要管理的数据量比较大
12、,且需要多用户同时运行访问,本项目将使用SQ1.Server2005作为后台数据库管理平台。2.4.2 数据库结构的设计对于具体的数据库设计,C参考了A的需求分析。由需求分析的规划可知整个项目对象有两种信息,所以对应的数据库也需要包含这两种信息,从而系统需要包含如下两个数据库表。 Message:留言信息表。 Reply:回复信息表。C给出了具体数据库表的书面文件:在SQ1.Server2005中创建一个名为“1.iuyan”的数据库,并新建了两个表:MeSSage和RePly。(1)表MeSSage用于保存留言信息,具体设计结构如表2-1所示。表2-1Message信息表结构字段名称数据类型
13、是否主键默认值功能描述IDint是递增1编号Titlevarchar(200)否Null标题MessagetextNull内容CreateDatedatetime否Null时间IPvarchar(20)否NullIP地址Emailvarchar(250)否Null邮箱Statustinyint否0状态(2)表RePIy用于保存留言回复信息,具体设计结构如表2-2所示。表2-2RePIy信息表结构字段名称数据类型是否主键默认值功能描述IDint是递增1编号ReplyVarchar(100O)否Null内容CreateDatedatetime否Null时间IPvarchar(20)否NullIP地
14、址MessageIDint否Null留言编号2005年12月9日,傍晚,数据库的重要性静下心细想一下,数据库工作看似比较简单,其实很有技术含量。合理的数据库设计是一个项目是否高效的基础。所以在进行设计时,C很谨慎、认真,经过4天的努力后才满足他的要求。接下来,需要我自己亲自出马,完成参数设置文件和数据库访问层的设计。2.5 系统配置设置和数据库访问层系统配置设置和数据库访问层的工作由我来完成,此步骤是整个项目的基础,项目中的具体功能将以此为基础进行扩展。我深知此步骤的重要性,所以一直通宵达旦,尽力寻求最优方案。2005年12月10日,上午,多云间阴拿着A的功能分析、B的规划文件和C的数据库设计
15、,我仔细统筹规划,总结出此过程需要两个阶段,分别需要完成系统配置和实现数据库访问层。2.5.1 系统配置经过前面两天的忙碌,总算有了一点成果。经过总体构成功能分析后,接下来就可以根据各构成功能模块进行实质性的工作了。具体有如下两个工作。新建网站项目。实现。1.新建网站项目实质性工作的第一步是创建一个VisualStudio2005项目,流程如下。(1)打开ViSUalStUdio2005,选择【文件】I【项目】I【网站】命令,在弹出的【新建网站】对话框中创建一个名为“1.iuyan”的网站项目,如图25所示。(2)然后根据2.3.1节中介绍的规划文件,分别创建对应的程序文件,并分别命名。创建完
16、毕后的效果如图2-6所示。图2-5新建网站项目!r*-1.frU4BI-J、WaJMr.c*4峪8JIJ*SMVtBa0(S*tx0IMKGJIUcvrMkda231.w7gmiSiA*r*gatBM*r3Ytf*MMkH图2-6VisualStudio2005解决方案资源管理器中的程序文件2.配置系统文件我们的这个在线留言簿项目是由几个程序文件实现的。要想这些程序成功运行,需要一个前提:配置系统文件。在ViSUalStUdio2005开发ASP.NET程序时,系统配置文件是Webxonfig,其主要功能是设置数据库的连接参数,并配置了系统与Ajax服务器的相关内容。1)配置连接字符串参数配置
17、连接字符串参数即设置系统程序连接数据库的参数,其对应实现代码如下。其中,“source”设置连接的数据库服务器;userid”和“pwd”分别指定数据库的登录名和密码;“database”设置连接数据库的名称。Web.conf文件是ASP.NET的基本文件,通常用于存储系统的公用信息,数据库的连接语句就在里面建立。上述代码是通用的ASP.NET配置代码,但是在ASP.NET代码调试时需要加入如下调试代码。设置“compilationdebug=true”后就启用了ASPX调试。如果将此值设置为false”,将提高此应用程序运行时的性能。设置为“true”后可以将调试符号(.pdb信息)插入到编
18、译页中。因为这将创建执行起来较慢的大文件,所以应该只在调试时将此值设置为true,而在所有其他时候都设置为falseo2)配置Ajax服务器参数配置Ajax服务器参数即配置AjaxControlToolkit程序集参数,为AjaxControlToolkit.dll程序集提供一个前缀字符串AjaxComrolToOIkit。这样,系统页面在引用AjaxControlToolkit.dll中的控件时,不需要额外添加Register代码。上述功能在controls元素内的对应实现代码如下。2005年12月10日,中午,Webxonfig文件的重要性我深刻知道Webconfig文件的重要性,在ASP
19、.NET中,资源的配置信息包含在一组配置文件中,每个文件都名为Web.config。每个配置文件都包含XM1.标记和子标记的嵌套层次结构,这些标记带有指定配置设置的属性。因为这些标记必须是格式正确的XM1.,所以标记、子标记和属性是区分大小写的。标记名和属性名是CameI大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母都是大写的。属性值是Pascal大小写形式的,这意味着第一个字符是大写的,任何后面连接单词的第一个字母也是大写的。但true和false例外,它们总是小写的。总结完毕之后,我决定早点休息,为接下来的数据库访问层设计做好准备。2.5.2数据库访问层设计
20、2005年12月10日,下午,出现阳光,什么是数据库访问层设计数据库访问层我已经使用了多次,但是其具体是一个什么东西我还是不很明白。带着问题,我在网络中找到了答案:数据库访问层就是实现数据库访问。网络中检索到的信息如下。数据库访问层:有时也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的SelectsInsertsUpdateDeIete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的napping,以及对象实体的持久化。我编写了文件lei.cs,实现应用程序的数据库访问层。文件lei.cs的主要功能是,在ASPNETAJAXWeb.Ajax1.eavew
21、ord空间内建立Message类,并实现对系统库中数据的处理。上述功能的实现流程如图2-7所示。图2-7数据访问层实现流程图0iS三三i傍晚核数据访问的方式数据库访问层是.NET框架的核心知识,建立合理的数据库访问层结构,可以提高系统的效率,并为后期维护带来极大的方便。通过实现数据的访问模式,可达到对物理数据库中的表、视图等的访问。应用程序对数据库的访问有以下3种方式。(1)事务脚本:存储过程。(2) ORM:对象-关系映射。(3)表模型:以物理数据表为基本单位进行访问,类似.NET中的DataTable。而我的想法是:在.NET中第三种方式更容易实现。因为表和视图有很多相似点,不同的是视图是
22、只读的。通过表模型,可以很好地解决实现层和表现层的结合问题,并解决效率问题,这在大型站点中十分重要。下面介绍文件lei.cs的具体实现流程。1 .定义Message类定义Message类的实现代码如下。usingSystem;usingSystem.Data;usingSystem-Configuration;usingSystem.Data.SqlClient;namespaceASPNETAJAXWeb.Ajax1.eaveword(publicclassMessage(publicMessage()()2 .获取系统内留言信息获取系统内留言信息即获取系统库内已存在的用言信息,其功能是由方
23、法GetMessagesO实现的。方法GetMeSSageS()的具体实现流程如下。(1)从系统配置文件Webxonfig内获取数据库连接参数,并将其保存在ConnectionString内。(2)使用连接字符串创建COn对象,实现数据库连接。(3)新建获取数据库留言数据的SQ1.查询语句。(4)创建获取数据的对象da。(5)打开数据库连接,获取查询数据。(6)将获取的查询结果保存在ds中,并返回ds。上述功能的对应实现代码如下。publicDataSetGetMessages()/获取连接字符串stringconnectionstring=ConfigurationManager-Conne
24、ctionStringshSqlconnectionstringh.connectionstring;/创建连接SqlConnectioncon=newSqlConnection(connectionstring);/创建SQ1.语句stringcmdText=nSE1.ECT*FROMMessageOrderbyCreateDateDESCn;/创建SqlDataAdapterSqlDataAdapterda=newSqlDataAdapter(cmdText,con);/定义DataSetDataSetds=newDataSet();try/打开连接con.Open();/填充数据da.F
25、ill(dsznDataTablen);catch(Exceptionex)/抛出异常thrownewException(ex.Message,ex);finally(/关闭连接con.Close();returnds;)数据库的设计真的很重要,因为几乎所有的动态Web站点的内容都是基于数据库数据的,所以对数据库的操作应该充分考虑效率问题。在此告诉读者一个小小的建议,建议读者充分利用所在机器内存中缓存的ADO对象。3 .添加系统留言信息添加系统留言信息,即将新发布的留言信息添加到系统库中,此功能是由方法AddMeSSage(Stringtitle,stringmessage,stringip,
26、stringemail)实现的。方法AddMeSSage(Stringtitle,stringmessage,stringip,stringemail)的具体实现流程如下。(1)从系统配置文件Webxonfig内获取数据库连接参数,并将其保存在ConnectionString内。(2)使用连接字符串创建Con对象,实现数据库连接。(3)使用SQ1.添加语句,然后创建Cmd对象准备插入操作。(4)打开数据库连接,执行新数据插入操作。(5)将数据插入操作所涉及的行数保存在result中。(6)插入成功则返回result值,失败则返回7。上述功能的对应实现代码如下。publicintAddMessa
27、ge(stringtitle,stringmessage,stringip,stringemail)(stringconnectionstring=ConfigurationManager.ConnectionStringshSqlconnectionstringh.connectionstring;SqlConnectioncon=newSqlConnection(connectionstring);/创建SQ1.语句stringcmdText=nINSERTINTOMessage(Title,Message,IPzEmail,CreateDatezStatus)VA1.UES(Titlez
28、QMessagez0IPzEmail,GETDATE()zO),;SqlCommandcmd=newSqlCommand(cmdTextzcon);/创建参数并赋值cmd.Parameters.Add(nQTitlenrSqlDbType.VarChar,200);cmd.Parameters.Add(,0Message,zSqlDbType,Text);cmd.Parameters.Add(0Ipn,SqlDbType.VarCharz20);cmd.Parameters.Add(,0Email,zSqlDbType.VarCharz255);cmd.Parameters0.Value=ti
29、tle;cmd.Parameters1.Value=message;cmd.Parameters2.Value=ip;cmd.Parameters3.Value=email;intresult=-1;try/打开连接con.Open();/操作数据result=cmd.ExecuteNonQuery();catch(Exceptionex)/抛出异常thrownewException(ex.Message,ex);finally(/关闭连接con.Close();returnresult;)4 .删除系统留言信息删除系统留言信息即将系统内存在的留言数据从系统库中删除,此功能是由方法DeIete
30、MessageCintmessageID)实现的。其具体实现流程如下。(1)从系统配置文件Webconfig内获取数据库连接参数,并将其保存在ConneCtiOnString内。(2)使用连接字符串创建COn对象,实现数据库连接。(3)使用SQ1.删除语句,然后创建Cmd对象准备删除操作。(4)打开数据库连接,执行新数据删除操作。(5)将数据删除操作所涉及的行数保存在result中。(6)删除成功则返回result值,失败则返回T。上述功能的对应实现代码如下。publicintDeleteMessage(intmessageID)stringconnectionstring=Configura
31、tionManager-ConnectionStrings,Sqlconnectionstring1.connectionstring;SqlConnectioncon=newSqlConnection(connectionstring);/创建SQ1.语句stringcmdText=,DE1.ETEMessageWHEREID=lDn;SqlCommandcmd=newSqlCommand(cmdText,con);/创建参数并赋值cmd.Parameters.Add(,IDnzSqlDbType.Intz4);cmd.Parameters0.Value=messageID;intresul
32、t=-1;try(/打开连接con.Open();/操作数据result=cmd.ExecuteNonQuery();)catch(Exceptionex)(/抛出异常thrownewException(ex.Message,ex);)finally(/关闭连接con.Close();)returnresult;)5 .获取系统内留言回复信息获取系统内留言回复信息即查询系统库内用户对留言的回复信息数据,此功能是由方法GetReplyByMessage(intmessageID)实现的。其具体实现流程如下。(1)从系统配置文件Web.config内获取数据库连接参数,并将其保存在Connecti
33、onString内。(2)使用连接字符串创建Con对象,实现数据库连接。(3)新建查询数据库留言回复数据的SQ1.查询语句。(4)创建获取数据的对象da。(5)打开数据库连接,获取查询数据。(6)将获取的查询结果保存在ds中,并返回ds。上述功能的对应实现代码如下。publicDataSetGetReplyByMessage(intmessageID)(stringconnectionstring=ConfigurationManager.ConnectionStrings,iSqlconnectionstringm.connectionstring;SqlConnectioncon=newS
34、qlConnection(connectionstring);/创建SQ1.语句stringcmdText=SE1.ECT*FROMReplyWHEREMessageID=QMessageIDOrderbyCreateDateDESC,;SqlDataAdapterda=newSqlDataAdapter(cmdText,con);/创建参数并赋值da.SelectCommand.Parameters.Add(,*0MessageID,SqlDbType.Intz4);da.SelectCommand.Parameters0.Value=messageID;/定义DataSetDataSetd
35、s=newDataSet();try(con.Open();/填充数据da.Fill(ds,nDataTablen);)catch(Exceptionex)thrownewException(ex.Message,ex);)finally(关闭连接con.Close();)returnds;6 .添加留言回复信息添加留言回复信息即将新发布的留言回复信息添加到系统库中,此功能是由方法AddRepIy(stringmessage,stringip,intmessageID)实现的。其具体实现流程如下。(1)从系统配置文件Webxonfig内获取数据库连接参数,并将其保存在ConnectionStr
36、ing内。(2)使用连接字符串创建Con对象,实现数据库连接。(3)使用SQ1.添加语句,然后创建Cmd对象准备插入操作。(4)打开数据库连接,执行新数据插入操作。(5)将数据插入操作所涉及的行数保存在result中。(6)插入成功则返回result值,失败则返回上述功能的对应实现代码如下。publicintAddReply(stringmessage,stringip,intmessageID)(stringconnectionstring=ConfigurationManagerXonnectionStringsnSQ1.cONNECTIONSTRINGn.ConnectionString
37、;SqlConnectioncon=newSqlConnection(connectionstring);stringcmdText=nINSERTINTOReply(Reply,IPzCreateDatezMessageID)VA1.UES(ReplyzIPzGETDATE(),0MessageID),;SqlCommandcmd=newSqlCommand(cmdText,con);/创建参数并赋值cmd.Parameters.Add(,Reply,zSqlDbType.VarCharf1000);cmd.Parameters.Add(,Ip,*zSqlDbType.VarChar,20)
38、;cmd.Parameters.Add(,0MessageID,zSqlDbType.Intz4);cmd.Parameters0.Value=message;cmd.Parametersl.Value=ip;cmd.Parameters2.Value=messageID;intresult=-1;try/打开连接con.Open();/操作数据result=cmd.ExecuteNonQuery();catch(Exceptionex)/抛出异常thrownewException(ex.Message,ex);finally(/关闭连接con.CloseO;returnresult;在上述各
39、处理方法中,使用了SQ1.的查询、添加和删除语句,对系统数据库内的数据进行了操作处理。在现实Web应用系统中,各类应用的数据库相关操作都是基于上述3种操作的。SQ1.语句是数据库技术的核心知识之一,读者可以通过在百度中检索“SQ1.教程”关键字来获取其相关知识。2005年12月18日,晴空万里今天完成了数据库访问层的编码工作,压力顿时减轻了许多,决定抽出一点时间做一个技术总结。在ASP.NET程序中,常把经常用到的设置性信息保存到数据库中,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,会加重数据库服务器负载,使之无法快速服务于更重要的事务处理。
40、而且Web服务器也必须不停地创建ADO对象,从而消耗大量资源,导致当用户很多时几乎失去响应。如果能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。在具体应用时,可以把已经取得了数据的ReCordSet对象存储在APPliCatiOn变量中。当用户访问时,从APPliCation变量中取得ReCordSet对象,而不需再次建立数据库连接。也可以将RecordSet对象里的数据存储在数组中,然后再将数组存储在APPliCatiOn变量中,使用时用数组的方式读取。另外,在此总结一下效率的问题。因为数据库技术是动态站点的基础,所以在W
41、eb程序内会有大量的查询语句。同时,随着站点访问量的增加,一个站点可能同时需要查询大量数据,所以数据库查询的效率问题便提上了日常议程。在此向读者提出如下两条建议。(1)合理使用索引。并不是所有索引对查询都有效,SQ1.是根据表中数据来进行查询优化的,当索引列有大量重复数据时,SQ1.查询可能不会去利用索引,如一表中有字段sex,male,female几乎各一半,那么即使在SeX上建了索引也对查询效率起不了作用。读者可以通过在百度中检索“索引效率优化”关键字来获取相关知识。(2)使用存储过程。存储过程是一个很好的工具,它不但提高了程序的安全性,而且也提高了数据处理效率。编写合理的语句可以决定存储
42、过程和触发器的效率。总结完毕之后,我决定早点休息,为接下来的具体编码阶段做准备。2.6编码实现2005年12月19日,上午,阳光明媚因为在系统框架设计中,我已经编写好了共用类,完成了数据访问层的设计,所以编码工作的思路就十分清晰了。D只需在我已经编写类的基础上进行扩充,即可完成整个编码工作。最后的编码工作很重要,所以我让思维最敏捷的D来完成。今天我把需要的前期资料(规划书、数据库设计、框架设计、类设计)都交给了Do2005年12月20日,上午,多云间阴,出现波澜5天过去了,和D约定的交付时间已经到了,但是我一直没有看见D的踪影。无奈之下,我给他打了一个电话。原来他女友父母从老家来看他,这几天陪
43、他们去逛大明湖、千佛山了,明天准备去的突泉,一直抽不出身来做项目。此时的我意识到了问题的严重性,D己经没有时间来完成项目了,我只好硬着头皮上架,做出了如下两个决定。(1)找学生会主席CH出面和学校沟通,再宽限5天,我们保证完成任务。(2)我尝试完成D的任务。幸好学校很宽容,宽限了我们5天,而我只能通宵达旦2.6.1 留言数据显示1 .留言数据显示模块留言数据显示模块的功能是,将系统库内的留言信息以列表的样式显示出来,并提供新留言发布表单,将发表的数据添加到系统库中。上述功能的实现文件如下。 文件Index.aspo 文件Index.aspx.cso 文件YanZhengma.aspx。 文件AjaxService.CSoI)留言列表显示页面文件IndeX.aspx的功能是,插入专用控件将系统内数据读取并显示出来,然后提供发布表单供用户发布新留言。其具体实现流程如下。 插入1个GridVieW控件,以列表样式显示库内的数据。 在表格内显示各留言的数据内容。 添加3个链接供留言发布、留言回复和留言管理操作。 调用AjaX程序集内的DynamiCPOPUIaIe控件,实现面板显示留言回复内容。文件IndeX.aspx中,留言列表显示页面的主要实现代码如下。%0Page1.anguage=nCfAUtoEVentWireUP=trueCodeFile=*Inde