




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章在線留言簿系統(tǒng) 當(dāng)今網(wǎng)絡(luò)應(yīng)用隨處可見,QQ、MSN、博客、微博、留言板、論壇隨著熱門生活節(jié)奏的加快,人們將更多地使用網(wǎng)絡(luò)進(jìn)行交流,而作為交流方式之一的在線留言簿系統(tǒng)更是深受人們的青睞。通過在線留言簿系統(tǒng),可以實(shí)現(xiàn)身處世界各地的人們的在線交流。本章將講解在線留言簿系統(tǒng)的運(yùn)行流程,并通過具體的實(shí)例來講解其具體的實(shí)現(xiàn)過程。2.1 第一個(gè)盈利項(xiàng)目無論你是一位IT菜鳥,還是職場中的程序高手,只要從事IT這一行業(yè),就會(huì)發(fā)現(xiàn)這行很容易攬到私活。我在學(xué)生時(shí)代就給一些公司干過網(wǎng)頁設(shè)計(jì)、圖像處理等一些兼職,當(dāng)然是給他們做下手。自從學(xué)習(xí)程序之后,我就一直想著做一個(gè)真正的項(xiàng)目,不但能賺到錢,而且還能讓我的產(chǎn)品能被客戶所使用。現(xiàn)在回憶起來,我做的第一個(gè)真正的盈利項(xiàng)目應(yīng)該是大四那年的在線留言簿系統(tǒng)。2.1.1 不速之客2005年12月1日,大雪紛飛 風(fēng)流倜儻的學(xué)生會(huì)主席CH來到了我們的宿舍。他的來意十分明確,學(xué)校官方網(wǎng)站準(zhǔn)備升級(jí),要增加一個(gè)在線留言簿系統(tǒng)供學(xué)生使用。學(xué)校想讓學(xué)生來完成這個(gè)升級(jí)工作,這樣不但節(jié)約開支,而且可以檢驗(yàn)學(xué)生的實(shí)踐能力。CH在得到這個(gè)消息后,第一時(shí)間想到了我們宿舍,因?yàn)槿A東區(qū)大學(xué)生計(jì)算機(jī)競賽團(tuán)體一等獎(jiǎng)來自我們宿舍。有了學(xué)生會(huì)主席的大力舉薦,加上我們的實(shí)力,這個(gè)項(xiàng)目就很自然地被我們拿下了。2.1.2 組建團(tuán)隊(duì)2005年12月2日,小雪飄飄雖然項(xiàng)目不大,我們還是組建了一個(gè)小團(tuán)隊(duì),團(tuán)隊(duì)成員如下。舍友A:一個(gè)來自偏遠(yuǎn)山區(qū)的孩子,家庭貧困??赡芤?yàn)榧彝サ脑?,酷愛學(xué)習(xí),快成學(xué)習(xí)超人了。僅有的零花錢全都買了輔導(dǎo)書:PHP、Java、ASP、Photoshop、Dreamweaver、C+、Flash。最大優(yōu)點(diǎn)是啥都懂,缺點(diǎn)是啥都不精通。項(xiàng)目的核心編碼他是不能勝任了,但是其策劃經(jīng)驗(yàn)是最好的。任務(wù):負(fù)責(zé)項(xiàng)目規(guī)劃,撰寫系統(tǒng)設(shè)計(jì)規(guī)劃書。舍友B:父母是做生意的,最大的特點(diǎn)是有錢,大學(xué)四年花錢如流水。從小酷愛編程,在C語言和數(shù)據(jù)庫領(lǐng)域有頗深的造詣。任務(wù):負(fù)責(zé)文件概覽工作。舍友C:一個(gè)運(yùn)動(dòng)狂人,喜歡驚險(xiǎn)刺激的戶外運(yùn)動(dòng),每天早晨去操場跑馬拉松,冬天穿短褲上街,從不生病,目標(biāo)是攀登珠峰。任務(wù):負(fù)責(zé)搭建并設(shè)計(jì)數(shù)據(jù)庫。舍友D:一個(gè)普通城市家庭的孩子,戴著一副眼鏡,文質(zhì)彬彬。此人十分聰明,屬于一看就會(huì)的類型,所以學(xué)習(xí)成績很好。課余愛好廣泛,喜歡看足球、踢足球。任務(wù):負(fù)責(zé)留言系統(tǒng)的編碼工作。我:目前還沒有出人頭地,充其量是IT界一只待飛的小鳥。任務(wù):負(fù)責(zé)系統(tǒng)整體框架設(shè)計(jì),協(xié)調(diào)項(xiàng)目中各個(gè)模塊的進(jìn)展,并設(shè)計(jì)數(shù)據(jù)庫訪問層。具體職能結(jié)構(gòu)如圖2-1所示。圖2-1 職能結(jié)構(gòu)圖整個(gè)項(xiàng)目的具體操作流程是:項(xiàng)目規(guī)劃文件概覽搭建數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫訪問層編碼實(shí)現(xiàn)。2.1.3 小會(huì)議2005年12月3日,晴今天我們召開了一個(gè)動(dòng)員會(huì)議,并為未來項(xiàng)目的進(jìn)展做了一個(gè)簡單的規(guī)劃。我們一致認(rèn)為:本項(xiàng)目包括后臺(tái)數(shù)據(jù)庫的建立、維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。應(yīng)用程序的開發(fā)采用目前比較流行的ADO數(shù)據(jù)庫訪問技術(shù),并將每個(gè)數(shù)據(jù)庫表的字段和操作封裝到相應(yīng)的類中,使應(yīng)用程序的各個(gè)窗體都能夠共享對(duì)表的操作,而不需要重復(fù)編碼,使程序更加易于維護(hù),從而將面向?qū)ο蟮某绦蛟O(shè)計(jì)思想成功地應(yīng)用于應(yīng)用程序設(shè)計(jì)中,這也是本系統(tǒng)的優(yōu)勢和特色,具體流程如圖2-2所示。圖2-2 實(shí)現(xiàn)流程最后我做了一個(gè)簡單的總結(jié):“要開發(fā)一個(gè)在線留言簿系統(tǒng),首先需要進(jìn)行系統(tǒng)需求分析和總體設(shè)計(jì),分析系統(tǒng)的使用對(duì)象和用戶需求,設(shè)計(jì)系統(tǒng)的體系結(jié)構(gòu)和數(shù)據(jù)庫表結(jié)構(gòu),決定使用的開發(fā)工具和后臺(tái)數(shù)據(jù)庫,規(guī)劃項(xiàng)目的開發(fā)進(jìn)度等?!贝蠹乙恢绿嶙h:A盡快作出規(guī)劃書,后續(xù)工作將以規(guī)劃書為基礎(chǔ)進(jìn)行擴(kuò)展。2005年12月14日,晴空萬里系統(tǒng)規(guī)劃是一個(gè)項(xiàng)目的基礎(chǔ),是任何項(xiàng)目的第一步工作。原來我做項(xiàng)目時(shí),往往看到功能之后就忙不迭地新建工程,并進(jìn)行編碼。但是總是忽略了這樣或那樣的要求,到最后需要經(jīng)過多次修改,造成了欲速則不達(dá)。這次我吸取了以前的教訓(xùn),在前期階段就進(jìn)行了一絲不茍的分析。2.2 系統(tǒng)概述和總體設(shè)計(jì)2005年12月5日,上午,陽光明媚會(huì)議完成后,整個(gè)團(tuán)隊(duì)就興奮地馬上開始了具體工作。今天一大早,A就做出了項(xiàng)目規(guī)劃書。整個(gè)規(guī)劃書分為兩個(gè)部分,分別是在線留言簿模塊功能原理和在線留言簿系統(tǒng)構(gòu)成模塊。2005年12月5日,下午按照預(yù)先分配的任務(wù),由A負(fù)責(zé)系統(tǒng)概述和總體設(shè)計(jì),這是我們整個(gè)項(xiàng)目的第一步,能不能打響第一槍就靠他了。我深知A向來做事比較拖沓,所以一開始就宣稱會(huì)一直緊盯著他不放。他無奈之下,只好抽出一段時(shí)間將任務(wù)完成了。2.2.1 在線留言簿模塊功能原理Web站點(diǎn)的在線留言簿系統(tǒng)的實(shí)現(xiàn)原理比較清晰明了,其主要操作是對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行添加和刪除操作。在其實(shí)現(xiàn)過程中,往往是根據(jù)系統(tǒng)的需求而進(jìn)行不同功能模塊的設(shè)置。在線留言簿模塊的必備功能如下。(1) 提供信息發(fā)布表單供用戶發(fā)布新的留言。(2) 將用戶發(fā)布的留言添加到系統(tǒng)庫中。(3) 在頁面內(nèi)顯示系統(tǒng)庫中的留言數(shù)據(jù)。(4) 對(duì)某條留言數(shù)據(jù)進(jìn)行在線回復(fù)。(5) 刪除系統(tǒng)內(nèi)不需要的留言。2.2.2 在線留言簿系統(tǒng)構(gòu)成模塊一個(gè)典型的在線留言簿系統(tǒng)構(gòu)成模塊如下。q 信息發(fā)表模塊:用戶可以在系統(tǒng)上發(fā)布新的留言信息。q 信息顯示模塊:用戶發(fā)布的留言信息能夠在系統(tǒng)上顯示。q 留言回復(fù)模塊:可以對(duì)用戶發(fā)布的留言進(jìn)行回復(fù),以實(shí)現(xiàn)相互間的交互。q 系統(tǒng)管理模塊:站點(diǎn)管理員能夠?qū)Πl(fā)布的信息進(jìn)行管理控制。上述應(yīng)用模塊的具體運(yùn)行流程如圖2-3所示。圖2-3 在線留言簿系統(tǒng)運(yùn)行流程圖通過前面的介紹,讀者可初步了解在線留言簿模塊的原理和具體的運(yùn)行流程。在接下來的內(nèi)容中,將通過一個(gè)具體的在線留言簿模塊實(shí)例,向讀者講解一個(gè)典型在線留言簿系統(tǒng)的具體設(shè)計(jì)流程。2005年12月7日,上午,晴空萬里歷時(shí)兩天,A的系統(tǒng)規(guī)劃工作大功告成,有了這個(gè)規(guī)劃書,以后的工作就有目的性了。接下來,需要B馬上規(guī)劃出系統(tǒng)所需的項(xiàng)目文件,為后期的編碼工作做好準(zhǔn)備。2.3 規(guī)劃系統(tǒng)文件2005年12月7日,下午,雪花飄飄經(jīng)過前面兩天的忙碌,總算有了一點(diǎn)成果。經(jīng)過總體構(gòu)成模塊分析后,接下來就可以根據(jù)各構(gòu)成功能模塊來規(guī)劃系統(tǒng)實(shí)現(xiàn)文件了。規(guī)劃項(xiàng)目文件的工作由B來完成,一下午的時(shí)間他就在Visual Studio 2005中規(guī)劃好了項(xiàng)目文件。2.3.1 規(guī)劃文件2005年12月8日,上午,陽光明媚今天是個(gè)好天氣,我的心情也充滿了期待。在這個(gè)美好的日子里,B在網(wǎng)上光顧了很多留言簿系統(tǒng),并且發(fā)表了多個(gè)留言信息。根據(jù)總結(jié)的模塊功能和規(guī)劃的結(jié)構(gòu)圖,B規(guī)劃出了整個(gè)項(xiàng)目的實(shí)現(xiàn)文件,具體說明如下。q 系統(tǒng)配置文件:功能是對(duì)項(xiàng)目程序進(jìn)行總體配置。q 樣式設(shè)置模塊:功能是設(shè)置系統(tǒng)文件的顯示樣式。q 數(shù)據(jù)庫文件:功能是搭建系統(tǒng)數(shù)據(jù)庫平臺(tái),保存系統(tǒng)的登錄數(shù)據(jù)。q 留言簿列表文件:功能是將系統(tǒng)內(nèi)的留言信息以列表樣式顯示出來。q 發(fā)布留言模塊:功能是向系統(tǒng)內(nèi)添加新的留言數(shù)據(jù)。q 留言管理頁面:功能是刪除系統(tǒng)內(nèi)部需要的留言數(shù)據(jù)。2.3.2 選擇我的武器2005年12月8日,下午,工具的困惑在此,B準(zhǔn)備使用當(dāng)前最新的Visual Studio 2005,預(yù)期規(guī)劃的各個(gè)文件在Visual Studio 2005解決方案資源管理器中的效果如圖2-4所示。圖2-4 預(yù)期規(guī)劃的項(xiàng)目文件2.4 數(shù)據(jù)庫設(shè)計(jì)本項(xiàng)目系統(tǒng)的開發(fā)主要包括后臺(tái)數(shù)據(jù)庫的建立、維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。數(shù)據(jù)庫設(shè)計(jì)是在線留言簿系統(tǒng)設(shè)計(jì)開發(fā)的一個(gè)重要組成部分。2.4.1 后臺(tái)數(shù)據(jù)庫及數(shù)據(jù)庫訪問接口的選擇2005年12月9日,又見雪花,選擇數(shù)據(jù)庫數(shù)據(jù)庫工作由C來完成,C對(duì)我們的建議為:開發(fā)數(shù)據(jù)庫管理信息系統(tǒng)需要選擇后臺(tái)數(shù)據(jù)庫和相應(yīng)的數(shù)據(jù)庫訪問接口。后臺(tái)數(shù)據(jù)庫的選擇需要考慮用戶需求、系統(tǒng)功能和性能要求等因素??紤]到系統(tǒng)所要管理的數(shù)據(jù)量比較大,且需要多用戶同時(shí)運(yùn)行訪問,本項(xiàng)目將使用SQL Server 2005作為后臺(tái)數(shù)據(jù)庫管理平臺(tái)。2.4.2 數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計(jì)對(duì)于具體的數(shù)據(jù)庫設(shè)計(jì),C參考了A的需求分析。由需求分析的規(guī)劃可知整個(gè)項(xiàng)目對(duì)象有兩種信息,所以對(duì)應(yīng)的數(shù)據(jù)庫也需要包含這兩種信息,從而系統(tǒng)需要包含如下兩個(gè)數(shù)據(jù)庫表。q Message:留言信息表。q Reply:回復(fù)信息表。C給出了具體數(shù)據(jù)庫表的書面文件:在SQL Server 2005中創(chuàng)建一個(gè)名為“Liuyan”的數(shù)據(jù)庫,并新建了兩個(gè)表:Message和Reply。(1) 表Message用于保存留言信息,具體設(shè)計(jì)結(jié)構(gòu)如表2-1所示。表2-1 Message信息表結(jié)構(gòu)字段名稱數(shù)據(jù)類型是否主鍵默認(rèn)值功能描述IDint是遞增1編號(hào)Titlevarchar(200)否Null標(biāo)題Messagetext否Null內(nèi)容CreateDatedatetime否Null時(shí)間IPvarchar(20)否NullIP地址Emailvarchar(250)否Null郵箱Statustinyint否0狀態(tài)(2) 表Reply用于保存留言回復(fù)信息,具體設(shè)計(jì)結(jié)構(gòu)如表2-2所示。表2-2 Reply信息表結(jié)構(gòu)字段名稱數(shù)據(jù)類型是否主鍵默認(rèn)值功能描述IDint是遞增1編號(hào)Replyvarchar(1000)否Null內(nèi)容CreateDatedatetime否Null時(shí)間IPvarchar(20)否NullIP地址MessageIDint否Null留言編號(hào)2005年12月9日,傍晚,數(shù)據(jù)庫的重要性靜下心細(xì)想一下,數(shù)據(jù)庫工作看似比較簡單,其實(shí)很有技術(shù)含量。合理的數(shù)據(jù)庫設(shè)計(jì)是一個(gè)項(xiàng)目是否高效的基礎(chǔ)。所以在進(jìn)行設(shè)計(jì)時(shí),C很謹(jǐn)慎、認(rèn)真,經(jīng)過4天的努力后才滿足他的要求。接下來,需要我自己親自出馬,完成參數(shù)設(shè)置文件和數(shù)據(jù)庫訪問層的設(shè)計(jì)。2.5 系統(tǒng)配置設(shè)置和數(shù)據(jù)庫訪問層系統(tǒng)配置設(shè)置和數(shù)據(jù)庫訪問層的工作由我來完成,此步驟是整個(gè)項(xiàng)目的基礎(chǔ),項(xiàng)目中的具體功能將以此為基礎(chǔ)進(jìn)行擴(kuò)展。我深知此步驟的重要性,所以一直通宵達(dá)旦,盡力尋求最優(yōu)方案。2005年12月10日,上午,多云間陰拿著A的功能分析、B的規(guī)劃文件和C的數(shù)據(jù)庫設(shè)計(jì),我仔細(xì)統(tǒng)籌規(guī)劃,總結(jié)出此過程需要兩個(gè)階段,分別需要完成系統(tǒng)配置和實(shí)現(xiàn)數(shù)據(jù)庫訪問層。2.5.1 系統(tǒng)配置經(jīng)過前面兩天的忙碌,總算有了一點(diǎn)成果。經(jīng)過總體構(gòu)成功能分析后,接下來就可以根據(jù)各構(gòu)成功能模塊進(jìn)行實(shí)質(zhì)性的工作了。具體有如下兩個(gè)工作。q 新建網(wǎng)站項(xiàng)目。q 實(shí)現(xiàn)。1. 新建網(wǎng)站項(xiàng)目實(shí)質(zhì)性工作的第一步是創(chuàng)建一個(gè)Visual Studio 2005項(xiàng)目,流程如下。(1) 打開Visual Studio 2005,選擇【文件】【項(xiàng)目】【網(wǎng)站】命令,在彈出的【新建網(wǎng)站】對(duì)話框中創(chuàng)建一個(gè)名為“Liuyan”的網(wǎng)站項(xiàng)目,如圖2-5所示。(2) 然后根據(jù)2.3.1節(jié)中介紹的規(guī)劃文件,分別創(chuàng)建對(duì)應(yīng)的程序文件,并分別命名。創(chuàng)建完畢后的效果如圖2-6所示。圖2-5 新建網(wǎng)站項(xiàng)目 圖2-6 Visual Studio 2005解決方案 資源管理器中的程序文件2. 配置系統(tǒng)文件我們的這個(gè)在線留言簿項(xiàng)目是由幾個(gè)程序文件實(shí)現(xiàn)的。要想這些程序成功運(yùn)行,需要一個(gè)前提:配置系統(tǒng)文件。在Visual Studio 2005開發(fā)ASP.NET程序時(shí),系統(tǒng)配置文件是Web.config,其主要功能是設(shè)置數(shù)據(jù)庫的連接參數(shù),并配置了系統(tǒng)與Ajax服務(wù)器的相關(guān)內(nèi)容。1) 配置連接字符串參數(shù)配置連接字符串參數(shù)即設(shè)置系統(tǒng)程序連接數(shù)據(jù)庫的參數(shù),其對(duì)應(yīng)實(shí)現(xiàn)代碼如下。其中,“source”設(shè)置連接的數(shù)據(jù)庫服務(wù)器;“user id”和“pwd”分別指定數(shù)據(jù)庫的登錄名和密碼;“database”設(shè)置連接數(shù)據(jù)庫的名稱。Web.config文件是ASP.NET的基本文件,通常用于存儲(chǔ)系統(tǒng)的公用信息,數(shù)據(jù)庫的連接語句就在里面建立。上述代碼是通用的ASP.NET配置代碼,但是在ASP.NET代碼調(diào)試時(shí)需要加入如下調(diào)試代碼。設(shè)置“compilation debug=true”后就啟用了 ASPX 調(diào)試。如果將此值設(shè)置為“false”,將提高此應(yīng)用程序運(yùn)行時(shí)的性能。設(shè)置為“true”后可以將調(diào)試符號(hào)(.pdb 信息) 插入到編譯頁中。因?yàn)檫@將創(chuàng)建執(zhí)行起來較慢的大文件,所以應(yīng)該只在調(diào)試時(shí)將此值設(shè)置為 true,而在所有其他時(shí)候都設(shè)置為false。2) 配置Ajax服務(wù)器參數(shù)配置Ajax服務(wù)器參數(shù)即配置Ajax Control Toolkit程序集參數(shù),為AjaxControlToolkit.dll程序集提供一個(gè)前綴字符串“AjaxControlToolkit”。這樣,系統(tǒng)頁面在引用AjaxControlToolkit.dll中的控件時(shí),不需要額外添加代碼。上述功能在元素內(nèi)的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。 2005年12月10日,中午,Web.config文件的重要性我深刻知道Web.config文件的重要性,在ASP.NET中,資源的配置信息包含在一組配置文件中,每個(gè)文件都名為Web.config。每個(gè)配置文件都包含XML標(biāo)記和子標(biāo)記的嵌套層次結(jié)構(gòu),這些標(biāo)記帶有指定配置設(shè)置的屬性。因?yàn)檫@些標(biāo)記必須是格式正確的XML,所以標(biāo)記、子標(biāo)記和屬性是區(qū)分大小寫的。標(biāo)記名和屬性名是Camel大小寫形式的,這意味著標(biāo)記名的第一個(gè)字符是小寫的,任何后面連接單詞的第一個(gè)字母都是大寫的。屬性值是Pascal大小寫形式的,這意味著第一個(gè)字符是大寫的,任何后面連接單詞的第一個(gè)字母也是大寫的。但true和false例外,它們總是小寫的??偨Y(jié)完畢之后,我決定早點(diǎn)休息,為接下來的數(shù)據(jù)庫訪問層設(shè)計(jì)做好準(zhǔn)備。2.5.2 數(shù)據(jù)庫訪問層設(shè)計(jì)2005年12月10日,下午,出現(xiàn)陽光,什么是數(shù)據(jù)庫訪問層設(shè)計(jì)數(shù)據(jù)庫訪問層我已經(jīng)使用了多次,但是其具體是一個(gè)什么東西我還是不很明白。帶著問題,我在網(wǎng)絡(luò)中找到了答案:數(shù)據(jù)庫訪問層就是實(shí)現(xiàn)數(shù)據(jù)庫訪問。網(wǎng)絡(luò)中檢索到的信息如下。數(shù)據(jù)庫訪問層:有時(shí)也稱為是持久層,其功能主要是負(fù)責(zé)數(shù)據(jù)庫的訪問。簡單的說法就是實(shí)現(xiàn)對(duì)數(shù)據(jù)表的 Select、Insert、Update、Delete的操作。如果要加入ORM的元素,那么就會(huì)包括對(duì)象和數(shù)據(jù)表之間的mapping,以及對(duì)象實(shí)體的持久化。我編寫了文件lei.cs,實(shí)現(xiàn)應(yīng)用程序的數(shù)據(jù)庫訪問層。文件lei.cs的主要功能是,在ASPNETAJAXWeb. AjaxLeaveword空間內(nèi)建立Message類,并實(shí)現(xiàn)對(duì)系統(tǒng)庫中數(shù)據(jù)的處理。上述功能的實(shí)現(xiàn)流程如圖2-7所示。圖2-7 數(shù)據(jù)訪問層實(shí)現(xiàn)流程圖2005年12月15日,傍晚,數(shù)據(jù)訪問的方式數(shù)據(jù)庫訪問層是.NET框架的核心知識(shí),建立合理的數(shù)據(jù)庫訪問層結(jié)構(gòu),可以提高系統(tǒng)的效率,并為后期維護(hù)帶來極大的方便。通過實(shí)現(xiàn)數(shù)據(jù)的訪問模式,可達(dá)到對(duì)物理數(shù)據(jù)庫中的表、視圖等的訪問。應(yīng)用程序?qū)?shù)據(jù)庫的訪問有以下3種方式。(1) 事務(wù)腳本:存儲(chǔ)過程。(2)ORM:對(duì)象-關(guān)系映射。(3) 表模型:以物理數(shù)據(jù)表為基本單位進(jìn)行訪問,類似 .NET中的DataTable。而我的想法是:在.NET中第三種方式更容易實(shí)現(xiàn)。因?yàn)楸砗鸵晥D有很多相似點(diǎn),不同的是視圖是只讀的。通過表模型,可以很好地解決實(shí)現(xiàn)層和表現(xiàn)層的結(jié)合問題,并解決效率問題,這在大型站點(diǎn)中十分重要。下面介紹文件lei.cs的具體實(shí)現(xiàn)流程。1. 定義Message類定義Message類的實(shí)現(xiàn)代碼如下。using System;using System.Data;using System.Configuration;using System.Data.SqlClient;namespace ASPNETAJAXWeb.AjaxLeavewordpublic class Messagepublic Message()2. 獲取系統(tǒng)內(nèi)留言信息獲取系統(tǒng)內(nèi)留言信息即獲取系統(tǒng)庫內(nèi)已存在的留言信息,其功能是由方法GetMessages()實(shí)現(xiàn)的。方法GetMessages()的具體實(shí)現(xiàn)流程如下。(1) 從系統(tǒng)配置文件Web.config內(nèi)獲取數(shù)據(jù)庫連接參數(shù),并將其保存在connectionString內(nèi)。(2) 使用連接字符串創(chuàng)建con對(duì)象,實(shí)現(xiàn)數(shù)據(jù)庫連接。(3) 新建獲取數(shù)據(jù)庫留言數(shù)據(jù)的SQL查詢語句。(4) 創(chuàng)建獲取數(shù)據(jù)的對(duì)象da。(5) 打開數(shù)據(jù)庫連接,獲取查詢數(shù)據(jù)。(6) 將獲取的查詢結(jié)果保存在ds中,并返回ds。上述功能的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。public DataSet GetMessages()/獲取連接字符串string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;/創(chuàng)建連接SqlConnection con = new SqlConnection(connectionString);/創(chuàng)建SQL語句string cmdText = SELECT * FROM Message Order by CreateDate DESC;/創(chuàng)建SqlDataAdapterSqlDataAdapter da = new SqlDataAdapter(cmdText,con);/定義DataSetDataSet ds = new DataSet();try /打開連接con.Open();/填充數(shù)據(jù)da.Fill(ds,DataTable);catch(Exception ex) /拋出異常throw new Exception(ex.Message,ex);finally /關(guān)閉連接con.Close();return ds;數(shù)據(jù)庫的設(shè)計(jì)真的很重要,因?yàn)閹缀跛械膭?dòng)態(tài)Web站點(diǎn)的內(nèi)容都是基于數(shù)據(jù)庫數(shù)據(jù)的,所以對(duì)數(shù)據(jù)庫的操作應(yīng)該充分考慮效率問題。在此告訴讀者一個(gè)小小的建議,建議讀者充分利用所在機(jī)器內(nèi)存中緩存的ADO對(duì)象。3. 添加系統(tǒng)留言信息添加系統(tǒng)留言信息,即將新發(fā)布的留言信息添加到系統(tǒng)庫中,此功能是由方法AddMessage(string title,string message,string ip,string email)實(shí)現(xiàn)的。方法AddMessage(string title,string message,string ip,string email)的具體實(shí)現(xiàn)流程如下。(1) 從系統(tǒng)配置文件Web.config內(nèi)獲取數(shù)據(jù)庫連接參數(shù),并將其保存在connectionString內(nèi)。(2) 使用連接字符串創(chuàng)建con對(duì)象,實(shí)現(xiàn)數(shù)據(jù)庫連接。(3) 使用SQL添加語句,然后創(chuàng)建cmd對(duì)象準(zhǔn)備插入操作。(4) 打開數(shù)據(jù)庫連接,執(zhí)行新數(shù)據(jù)插入操作。(5) 將數(shù)據(jù)插入操作所涉及的行數(shù)保存在result中。(6) 插入成功則返回result值,失敗則返回-1。上述功能的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。public int AddMessage(string title,string message,string ip,string email) string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/創(chuàng)建SQL語句string cmdText = INSERT INTO Message(Title,Message,IP,Email,CreateDate, Status)VALUES(Title,Message,IP,Email,GETDATE(),0);SqlCommand cmd = new SqlCommand(cmdText,con);/創(chuàng)建參數(shù)并賦值cmd.Parameters.Add(Title,SqlDbType.VarChar,200);cmd.Parameters.Add(Message,SqlDbType.Text);cmd.Parameters.Add(Ip,SqlDbType.VarChar,20);cmd.Parameters.Add(Email,SqlDbType.VarChar,255);cmd.Parameters0.Value = title;cmd.Parameters1.Value = message;cmd.Parameters2.Value = ip;cmd.Parameters3.Value = email;int result = -1;try /打開連接con.Open();/操作數(shù)據(jù)result = cmd.ExecuteNonQuery();catch(Exception ex) /拋出異常throw new Exception(ex.Message,ex);finally /關(guān)閉連接con.Close();return result;4. 刪除系統(tǒng)留言信息刪除系統(tǒng)留言信息即將系統(tǒng)內(nèi)存在的留言數(shù)據(jù)從系統(tǒng)庫中刪除,此功能是由方法DeleteMessage(int messageID)實(shí)現(xiàn)的。其具體實(shí)現(xiàn)流程如下。(1) 從系統(tǒng)配置文件Web.config內(nèi)獲取數(shù)據(jù)庫連接參數(shù),并將其保存在connectionString內(nèi)。(2) 使用連接字符串創(chuàng)建con對(duì)象,實(shí)現(xiàn)數(shù)據(jù)庫連接。(3) 使用SQL刪除語句,然后創(chuàng)建cmd對(duì)象準(zhǔn)備刪除操作。(4) 打開數(shù)據(jù)庫連接,執(zhí)行新數(shù)據(jù)刪除操作。(5) 將數(shù)據(jù)刪除操作所涉及的行數(shù)保存在result中。(6) 刪除成功則返回result值,失敗則返回-1。上述功能的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。public int DeleteMessage(int messageID)string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/創(chuàng)建SQL語句string cmdText = DELETE Message WHERE ID = ID;SqlCommand cmd = new SqlCommand(cmdText,con);/創(chuàng)建參數(shù)并賦值cmd.Parameters.Add(ID,SqlDbType.Int,4);cmd.Parameters0.Value = messageID;int result = -1;try /打開連接con.Open();/操作數(shù)據(jù)result = cmd.ExecuteNonQuery();catch(Exception ex) /拋出異常throw new Exception(ex.Message,ex);finally /關(guān)閉連接con.Close();return result;5. 獲取系統(tǒng)內(nèi)留言回復(fù)信息獲取系統(tǒng)內(nèi)留言回復(fù)信息即查詢系統(tǒng)庫內(nèi)用戶對(duì)留言的回復(fù)信息數(shù)據(jù),此功能是由方法GetReplyByMessage(int messageID)實(shí)現(xiàn)的。其具體實(shí)現(xiàn)流程如下。(1) 從系統(tǒng)配置文件Web.config內(nèi)獲取數(shù)據(jù)庫連接參數(shù),并將其保存在connectionString內(nèi)。(2) 使用連接字符串創(chuàng)建con對(duì)象,實(shí)現(xiàn)數(shù)據(jù)庫連接。(3) 新建查詢數(shù)據(jù)庫留言回復(fù)數(shù)據(jù)的SQL查詢語句。(4) 創(chuàng)建獲取數(shù)據(jù)的對(duì)象da。(5) 打開數(shù)據(jù)庫連接,獲取查詢數(shù)據(jù)。(6) 將獲取的查詢結(jié)果保存在ds中,并返回ds。上述功能的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。public DataSet GetReplyByMessage(int messageID) string connectionString = ConfigurationManager. ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/創(chuàng)建SQL語句string cmdText = SELECT * FROM Reply WHERE MessageID = MessageID Order by CreateDate DESC;SqlDataAdapter da = new SqlDataAdapter(cmdText,con);/創(chuàng)建參數(shù)并賦值da.SelectCommand.Parameters.Add(MessageID,SqlDbType.Int,4);da.SelectCommand.Parameters0.Value = messageID;/定義DataSetDataSet ds = new DataSet();try con.Open();/填充數(shù)據(jù)da.Fill(ds,DataTable);catch(Exception ex) throw new Exception(ex.Message,ex);finally /關(guān)閉連接con.Close();return ds;6. 添加留言回復(fù)信息添加留言回復(fù)信息即將新發(fā)布的留言回復(fù)信息添加到系統(tǒng)庫中,此功能是由方法AddReply(string message,string ip,int messageID)實(shí)現(xiàn)的。其具體實(shí)現(xiàn)流程如下。(1) 從系統(tǒng)配置文件Web.config內(nèi)獲取數(shù)據(jù)庫連接參數(shù),并將其保存在connectionString內(nèi)。(2) 使用連接字符串創(chuàng)建con對(duì)象,實(shí)現(xiàn)數(shù)據(jù)庫連接。(3) 使用SQL添加語句,然后創(chuàng)建cmd對(duì)象準(zhǔn)備插入操作。(4) 打開數(shù)據(jù)庫連接,執(zhí)行新數(shù)據(jù)插入操作。(5) 將數(shù)據(jù)插入操作所涉及的行數(shù)保存在result中。(6) 插入成功則返回result值,失敗則返回-1。上述功能的對(duì)應(yīng)實(shí)現(xiàn)代碼如下。public int AddReply(string message,string ip,int messageID) string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);string cmdText = INSERT INTO Reply(Reply,IP,CreateDate, MessageID)VALUES(Reply,IP,GETDATE(),MessageID);SqlCommand cmd = new SqlCommand(cmdText,con);/創(chuàng)建參數(shù)并賦值cmd.Parameters.Add(Reply,SqlDbType.VarChar,1000);cmd.Parameters.Add(Ip,SqlDbType.VarChar,20);cmd.Parameters.Add(MessageID,SqlDbType.Int,4);cmd.Parameters0.Value = message;cmd.Parameters1.Value = ip;cmd.Parameters2.Value = messageID;int result = -1;try /打開連接con.Open();/操作數(shù)據(jù)result = cmd.ExecuteNonQuery();catch(Exception ex) /拋出異常throw new Exception(ex.Message,ex);finally /關(guān)閉連接con.Close();return result;在上述各處理方法中,使用了SQL的查詢、添加和刪除語句,對(duì)系統(tǒng)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行了操作處理。在現(xiàn)實(shí)Web應(yīng)用系統(tǒng)中,各類應(yīng)用的數(shù)據(jù)庫相關(guān)操作都是基于上述3種操作的。SQL語句是數(shù)據(jù)庫技術(shù)的核心知識(shí)之一,讀者可以通過在百度中檢索“SQL教程”關(guān)鍵字來獲取其相關(guān)知識(shí)。2005年12月18日,晴空萬里今天完成了數(shù)據(jù)庫訪問層的編碼工作,壓力頓時(shí)減輕了許多,決定抽出一點(diǎn)時(shí)間做一個(gè)技術(shù)總結(jié)。在ASP.NET程序中,常把經(jīng)常用到的設(shè)置性信息保存到數(shù)據(jù)庫中,這些信息對(duì)于每一個(gè)訪問用戶都是相同的。若每一個(gè)用戶訪問時(shí),都要去數(shù)據(jù)庫里取出來,然后顯示給用戶,會(huì)加重?cái)?shù)據(jù)庫服務(wù)器負(fù)載,使之無法快速服務(wù)于更重要的事務(wù)處理。而且Web服務(wù)器也必須不停地創(chuàng)建ADO對(duì)象,從而消耗大量資源,導(dǎo)致當(dāng)用戶很多時(shí)幾乎失去響應(yīng)。如果能把一些常用信息事先存儲(chǔ)在內(nèi)存中,當(dāng)用戶訪問時(shí),直接從內(nèi)存中取出,顯示給用戶,則可以大大減小系統(tǒng)的壓力,提高響應(yīng)速度。 在具體應(yīng)用時(shí),可以把已經(jīng)取得了數(shù)據(jù)的RecordSet對(duì)象存儲(chǔ)在Application變量中。當(dāng)用戶訪問時(shí),從Application變量中取得RecordSet對(duì)象,而不需再次建立數(shù)據(jù)庫連接。也可以將RecordSet對(duì)象里的數(shù)據(jù)存儲(chǔ)在數(shù)組中,然后再將數(shù)組存儲(chǔ)在Application變量中,使用時(shí)用數(shù)組的方式讀取。另外,在此總結(jié)一下效率的問題。因?yàn)閿?shù)據(jù)庫技術(shù)是動(dòng)態(tài)站點(diǎn)的基礎(chǔ),所以在Web程序內(nèi)會(huì)有大量的查詢語句。同時(shí),隨著站點(diǎn)訪問量的增加,一個(gè)站點(diǎn)可能同時(shí)需要查詢大量數(shù)據(jù),所以數(shù)據(jù)庫查詢的效率問題便提上了日常議程。在此向讀者提出如下兩條建議。(1) 合理使用索引。并不是所有索引對(duì)查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來進(jìn)行查詢優(yōu)化的,當(dāng)索引列有大量重復(fù)數(shù)據(jù)時(shí),SQL查詢可能不會(huì)去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex上建了索引也對(duì)查詢效率起不了作用。讀者可以通過在百度中檢索“索引效率優(yōu)化”關(guān)鍵字來獲取相關(guān)知識(shí)。(2) 使用存儲(chǔ)過程。存儲(chǔ)過程是一個(gè)很好的工具,它不但提高了程序的安全性,而且也提高了數(shù)據(jù)處理效率。編寫合理的語句可以決定存儲(chǔ)過程和觸發(fā)器的效率??偨Y(jié)完畢之后,我決定早點(diǎn)休息,為接下來的具體編碼階段做準(zhǔn)備。2.6 編 碼 實(shí) 現(xiàn)2005年12月19日,上午,陽光明媚因?yàn)樵谙到y(tǒng)框架設(shè)計(jì)中,我已經(jīng)編寫好了共用類,完成了數(shù)據(jù)訪問層的設(shè)計(jì),所以編碼工作的思路就十分清晰了。D只需在我已經(jīng)編寫類的基礎(chǔ)上進(jìn)行擴(kuò)充,即可完成整個(gè)編碼工作。最后的編碼工作很重要,所以我讓思維最敏捷的D來完成。今天我把需要的前期資料(規(guī)劃書、數(shù)據(jù)庫設(shè)計(jì)、框架設(shè)計(jì)、類設(shè)計(jì))都交給了D。2005年12月20日,上午,多云間陰,出現(xiàn)波瀾5天過去了,和D約定的交付時(shí)間已經(jīng)到了,但是我一直沒有看見D的蹤影。無奈之下,我給他打了一個(gè)電話。原來他女友父母從老家來看他,這幾天陪他們?nèi)ス浯竺骱?、千佛山了,明天?zhǔn)備去趵突泉,一直抽不出身來做項(xiàng)目。此時(shí)的我意識(shí)到了問題的嚴(yán)重性,D已經(jīng)沒有時(shí)間來完成項(xiàng)目了,我只好硬著頭皮上架,做出了如下兩個(gè)決定。(1) 找學(xué)生會(huì)主席CH出面和學(xué)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食品營養(yǎng)與衛(wèi)生考試試卷及答案
- 2025年人力資源管理師考試題庫及答案
- 2025年企業(yè)發(fā)展戰(zhàn)略與管理考試題及答案
- 2025年設(shè)備管理考試試卷及答案的解析
- 2025年酒店管理與服務(wù)專業(yè)資格考試試卷及答案
- 2025年金融科技與創(chuàng)新管理考試題及答案
- 2025年互聯(lián)網(wǎng)金融風(fēng)險(xiǎn)管理專業(yè)考試試題及答案
- 2025年護(hù)士執(zhí)業(yè)資格考試重點(diǎn)試卷及答案
- 《細(xì)胞分裂與繁殖過程:五年級(jí)生物教學(xué)教案》
- 地產(chǎn)游戲活動(dòng)方案
- 期末試卷(試題)(含答案)-2024-2025學(xué)年一年級(jí)下冊(cè)數(shù)學(xué)北師大版
- 上海市社區(qū)工作者管理辦法
- 腦卒中康復(fù)PPT醫(yī)學(xué)課件
- 高等數(shù)學(xué)(下冊(cè))資料期末復(fù)習(xí)試題與答案
- 四沖程內(nèi)燃機(jī) 機(jī)械原理課程設(shè)計(jì)說明書
- PCB 企業(yè)生產(chǎn)工藝及風(fēng)險(xiǎn)點(diǎn)
- Grace評(píng)分表、TIMI評(píng)分、CRUSAD評(píng)分、wells評(píng)分等
- 消防安全工作臺(tái)賬-消防臺(tái)賬記錄
- 金日-冷卻塔與節(jié)能
- 中考數(shù)學(xué)《分式及分式方程》計(jì)算題(附答案)
- 用人單位用工備案花名冊(cè)
評(píng)論
0/150
提交評(píng)論