版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本科畢業(yè)設(shè)計(jì)(論文)</p><p> 題目:人體飲食健康系統(tǒng)</p><p> 院(系) </p><p> 專 業(yè) </p><p> 班 級(jí) </p>&l
2、t;p> 姓 名 </p><p> 學(xué) 號(hào) </p><p> 導(dǎo) 師 </p><p> 年 月 日</p><p><b> 人體飲食健康系統(tǒng)</b&g
3、t;</p><p><b> 摘要</b></p><p> 隨著現(xiàn)代農(nóng)業(yè)與食品工業(yè)的發(fā)展,食物的種類越來(lái)越多,同時(shí),人們的生活節(jié)奏日益加快,消費(fèi)者缺乏食品營(yíng)養(yǎng)與健康方面的知識(shí),飲食結(jié)構(gòu)不合理,營(yíng)養(yǎng)平衡經(jīng)常被打破,導(dǎo)致疾病不斷滋生,如三高,營(yíng)養(yǎng)不良等。</p><p> 本人體飲食健康系統(tǒng)采用C/S結(jié)構(gòu),主要對(duì)用戶的飲食信息以及營(yíng)養(yǎng)攝入
4、情況進(jìn)行管理,方便用戶建立一個(gè)完善的、強(qiáng)大的飲食信息數(shù)據(jù)庫(kù)。本文詳細(xì)介紹了人體飲食健康系統(tǒng)的實(shí)現(xiàn)原理及所用到的技術(shù)方案,最終實(shí)現(xiàn)動(dòng)態(tài)跟蹤消費(fèi)者的飲食習(xí)慣,進(jìn)行營(yíng)養(yǎng)評(píng)估和營(yíng)養(yǎng)配餐,幫助消費(fèi)者建立起健康的飲食方案。</p><p> 關(guān)鍵詞: 人體飲食健康系統(tǒng) 飲食習(xí)慣 營(yíng)養(yǎng)評(píng)估 C/S</p><p> Human diet and health system</p>
5、<p><b> Abstract</b></p><p> With the development of modern agriculture and food industry, the kinds of food became rich . At the same time, the pace of Modern people's life was becom
6、ing fast and people had the lack of knowledge about nutrition and health, so that diet structure was irrational , nutritional balance was often broken up and there were many diseases, such as high blood sugar, high blood
7、 lipids, hypertension, malnutrition and so on.</p><p> The C/S structure is used to The human diet health system , It facilitates the users to establish a perfect and powerful diet information database,main
8、ly on the user's diet and nutrition information management, This paper introduces the realization of the human diet health system principle and use of technology solutions, realizes the dynamic tracking about eating
9、habits of consumers, and conducts nutritional assessment and nutrition recipe, in order to help consumers establish a healthy diet pr</p><p> Key word:human diet and health system eating habits nutritiona
10、l assessment </p><p><b> 目錄</b></p><p><b> 中文摘要I</b></p><p><b> 英文摘要II</b></p><p> 主要符號(hào)列表VII</p><p><b> 1
11、 緒論1</b></p><p> 1.1題目背景及研究意義1</p><p> 1.2國(guó)內(nèi)外相關(guān)研究情況1</p><p> 2 人體飲食健康系統(tǒng)開發(fā)工具及語(yǔ)言特點(diǎn)3</p><p> 2.1 Visual Studio.NET主要特點(diǎn)如下3</p><p> 2.1.1提供加速開發(fā)
12、過(guò)程的高效工具3</p><p> 2.1.2 提供對(duì)各種網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計(jì)能力3</p><p> 2.1.3 利用XML和Web Service來(lái)簡(jiǎn)化分布式計(jì)算3</p><p> 2.1.4快速構(gòu)建中間層商務(wù)組件3</p><p> 2.1.5構(gòu)建可靠的可伸縮解決方案3</p><p>
13、2.2.1簡(jiǎn)潔的語(yǔ)法4</p><p> 2.2.2精心地面向?qū)ο笤O(shè)計(jì)4</p><p> 2.3 SQL2008主要特點(diǎn)5</p><p> 2.3.1 NET框架5</p><p> 2.3.2 XML技術(shù)5</p><p> 2.3.3 ADO.NET2.0版本5</p>&l
14、t;p> 2.3.4增強(qiáng)的安全性5</p><p> 2.3.5 Transact-SQL的增強(qiáng)性能6</p><p> 2.3.6 SQL服務(wù)中介6</p><p> 2.3.7通告服務(wù)6</p><p> 2.3.8 Web服務(wù)6</p><p> 2.3.9報(bào)表服務(wù)6</p&g
15、t;<p> 2.3.10全文搜索功能的增強(qiáng)6</p><p> 2.4 C#與ADO.NET7</p><p> 2.4.1 C#中的數(shù)據(jù)庫(kù)訪問(wèn)7</p><p> 2.4.2 數(shù)據(jù)綁定15</p><p> 2.5 SQL語(yǔ)言16</p><p> 2.5.1表定義語(yǔ)句
16、16</p><p> 2.5.2視圖定義語(yǔ)句16</p><p> 2.5.3索引定義語(yǔ)句17</p><p> 2.5.4數(shù)據(jù)操縱語(yǔ)句17</p><p> 2.5.5 INSERT語(yǔ)句17</p><p> 2.5.6 UPDATE語(yǔ)句17</p><p> 2.5
17、.7 DELETE語(yǔ)句17</p><p> 2.5.8查詢語(yǔ)句17</p><p> 2.5.9條件查詢18</p><p> 2.5.10查詢排序18</p><p> 2.5.11統(tǒng)計(jì)查詢18</p><p> 2.5.12Group by子句18</p><p>
18、 2.5.13Distinct關(guān)鍵詞19</p><p> 2.5.14 Top關(guān)鍵詞19</p><p> 2.5.15多表查詢19</p><p> 2.5.16多重查詢19</p><p> 2.5.17 EXISTS關(guān)鍵詞19</p><p><b> 3 系統(tǒng)分析20</
19、b></p><p> 3.1需求分析20</p><p> 3.2開發(fā)工具的選擇20</p><p> 4 總體設(shè)計(jì)21</p><p> 4.1項(xiàng)目規(guī)劃21</p><p> 4.2 系統(tǒng)業(yè)務(wù)流程分析21</p><p> 4.3 系統(tǒng)功能結(jié)構(gòu)22<
20、/p><p><b> 5 系統(tǒng)設(shè)計(jì)23</b></p><p> 5.1設(shè)計(jì)目標(biāo)23</p><p> 5.2開發(fā)及運(yùn)行環(huán)境23</p><p> 5.3數(shù)據(jù)庫(kù)設(shè)計(jì)23</p><p> 5.3.1數(shù)據(jù)表的概要說(shuō)明23</p><p> 5.3.2數(shù)據(jù)表
21、E-R圖24</p><p> 5.3.3主要的數(shù)據(jù)表結(jié)構(gòu)26</p><p> 6 主要功能模塊及界面設(shè)計(jì)29</p><p> 6.1系統(tǒng)登錄設(shè)計(jì)29</p><p><b> 6.2主窗口30</b></p><p> 6.3用戶基本信息窗口31</p>
22、<p> 6.4營(yíng)養(yǎng)攝入標(biāo)準(zhǔn)窗口32</p><p> 6.5飲食記錄窗口33</p><p> 6.6營(yíng)養(yǎng)評(píng)估窗口35</p><p> 6.7飲食推薦窗口36</p><p> 6.8營(yíng)養(yǎng)配餐窗口36</p><p><b> 7 測(cè)試38</b><
23、/p><p> 7.1軟件測(cè)試的重要性38</p><p> 7.2人體飲食健康系統(tǒng)主窗體模塊測(cè)試38</p><p><b> 8小結(jié)39</b></p><p><b> 參考文獻(xiàn)40</b></p><p><b> 致謝42</b>
24、;</p><p> 畢業(yè)設(shè)計(jì)(論文)知識(shí)產(chǎn)權(quán)聲明43</p><p> 畢業(yè)設(shè)計(jì)(論文)獨(dú)創(chuàng)性聲明44</p><p><b> 附錄A45</b></p><p><b> 附錄B54</b></p><p><b> 主要符號(hào)列表</b
25、></p><p> Microsoft Visual Studio 2010 系統(tǒng)開發(fā)平臺(tái)</p><p> Microsoft SQL Server 2008 數(shù)據(jù)庫(kù)</p><p> C# 系統(tǒng)開發(fā)語(yǔ)言</p><p> C/S
26、 客戶/服務(wù)器</p><p> HTTP 超文本傳輸協(xié)議</p><p> ADO.NET 數(shù)據(jù)源進(jìn)行交互的面向?qū)ο箢悗?kù)</p><p><b> 1 緒論</b></p><p> 1.1題目背景及研究意義&l
27、t;/p><p> 居民膳食營(yíng)養(yǎng)狀況是一個(gè)國(guó)家經(jīng)濟(jì)發(fā)展和社會(huì)進(jìn)步的重要標(biāo)志[1]。改革開放以來(lái),人們的物質(zhì)水平不斷提高,人們的飲食已由溫飽型轉(zhuǎn)向營(yíng)養(yǎng)型 。我們知道,不同類型的人,由于年齡、體重、勞動(dòng)強(qiáng)度、性別等差別,每日所要攝取的營(yíng)養(yǎng)素標(biāo)準(zhǔn)有所不同,但是人們往往更多注重的是食品的美味,卻往往忽略食物的搭配及營(yíng)養(yǎng)[2],飲食結(jié)構(gòu)不合理,營(yíng)養(yǎng)平衡經(jīng)常被打破,導(dǎo)致疾病不斷滋生。有研究表明:健康膳食是預(yù)防慢性病如肥胖、高血
28、壓、膽固醇血癥等的主要措施之一[3]。本課題則以營(yíng)養(yǎng)學(xué)理論為基礎(chǔ),運(yùn)用現(xiàn)代信息技術(shù),跟蹤消費(fèi)者的飲食習(xí)慣,及時(shí)提出預(yù)警和指導(dǎo)信息,幫助消費(fèi)者建立起健康的飲食方案。</p><p> 1.2國(guó)內(nèi)外相關(guān)研究情況</p><p> 目前國(guó)內(nèi)外對(duì)醫(yī)學(xué)營(yíng)養(yǎng)學(xué)教育及研究均十分重視[4-7],在國(guó)內(nèi)科研人員在營(yíng)養(yǎng)健康的調(diào)研和實(shí)驗(yàn)中首先選擇的群體是學(xué)生,由于學(xué)生營(yíng)養(yǎng)與健康狀況是反映一個(gè)國(guó)家或地區(qū)經(jīng)濟(jì)與
29、社會(huì)發(fā)展、衛(wèi)生保健水平和人口素質(zhì)的重要指標(biāo)[8]。學(xué)生營(yíng)養(yǎng)健康現(xiàn)狀的調(diào)查結(jié)果顯示學(xué)生們的營(yíng)養(yǎng)攝入不均衡,大體表現(xiàn)為營(yíng)養(yǎng)不良,低血紅蛋白,肥胖等癥狀,研究報(bào)告中提出的解決方案是每個(gè)學(xué)校須配備專業(yè)的營(yíng)養(yǎng)配餐師,以保證學(xué)生科學(xué)的攝食營(yíng)養(yǎng)[9-12]。隨著計(jì)算機(jī)與網(wǎng)絡(luò)技術(shù)的發(fā)展,研究人員開始用計(jì)算機(jī)輔助人體營(yíng)養(yǎng)配餐,進(jìn)行決策但總體國(guó)內(nèi)對(duì)這方面研究不多[13-16],較早的有北方工業(yè)大學(xué)和北京營(yíng)養(yǎng)研究所1991年研制的“大學(xué)生營(yíng)養(yǎng)配餐電腦系統(tǒng)”[
30、17],該系統(tǒng)實(shí)質(zhì)是用電腦來(lái)手工配餐,還沒有能夠達(dá)到自動(dòng)配餐和專家支持的水平.四川一研究所研制了“衛(wèi)生導(dǎo)餐系統(tǒng)”于1997年在湖北通過(guò)國(guó)家鑒定。另有科研人員研制了營(yíng)養(yǎng)評(píng)價(jià)和營(yíng)養(yǎng)配餐電腦[18],以及應(yīng)用微機(jī)進(jìn)行營(yíng)養(yǎng)配餐和菜肴營(yíng)養(yǎng)評(píng)價(jià)[19]。國(guó)外在這方面做了不少的研究[20,21],在二十一世紀(jì)初期,國(guó)外在利用計(jì)算機(jī)進(jìn)行營(yíng)養(yǎng)配餐方面要領(lǐng)先于我國(guó),而且趨向于方便、實(shí)用、小型化的硬件產(chǎn)品。如日本東芝</p><p>
31、 間的關(guān)系進(jìn)行了研究[24],科研人員將營(yíng)養(yǎng)配餐與醫(yī)學(xué)相結(jié)合,對(duì)患者進(jìn)行營(yíng)養(yǎng)治療。還有各種營(yíng)養(yǎng)配餐軟件是面向個(gè)人,更人性化,操作簡(jiǎn)單做到每個(gè)人都可以營(yíng)養(yǎng)膳食。軟件未來(lái)的發(fā)展趨勢(shì)是操作起來(lái)更便捷,面向的對(duì)象更全面,智能化,能夠滿足用戶飲食健康方面的更多查詢需求。</p><p> 2 人體飲食健康系統(tǒng)開發(fā)工具及語(yǔ)言特點(diǎn)</p><p> 2.1 Visual Studio.NET主要
32、特點(diǎn)如下2.1.1提供加速開發(fā)過(guò)程的高效工具</p><p> Visual Studio.NET[25]提供了一個(gè)統(tǒng)一的、緊密集成的可視化編程的環(huán)境,能夠幫助用戶簡(jiǎn)化開發(fā)網(wǎng)絡(luò)應(yīng)用程序過(guò)程,并且縮短學(xué)習(xí)使用方法的時(shí)間。這個(gè)平臺(tái)提供了一種新的語(yǔ)言——C#和共享的HTML、XML和樣式單編輯器,用戶可以輕松地借助包括C#在內(nèi)的任何一種Visual Studio語(yǔ)言來(lái)開發(fā)網(wǎng)絡(luò)應(yīng)用程序。</p><
33、;p> 2.1.2 提供對(duì)各種網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計(jì)能力</p><p> 此平臺(tái)借助了Web Form,這使得用戶可以用它們?cè)陂_發(fā)基于窗體的桌面應(yīng)用程序時(shí),創(chuàng)建跨平臺(tái)、跨瀏覽器的網(wǎng)絡(luò)應(yīng)用程序。</p><p> 2.1.3 利用XML和Web Service來(lái)簡(jiǎn)化分布式計(jì)算</p><p> XML被用來(lái)對(duì)上述功能請(qǐng)求的參數(shù)進(jìn)行格式的統(tǒng)一,從而使這些
34、請(qǐng)求能夠使用于所有的軟件和硬件。這樣使得對(duì)Web Service的訪問(wèn)能夠通過(guò)使用任何一種組件模型、任何一種語(yǔ)言、在任何一種操作系統(tǒng)上實(shí)現(xiàn)。 而Web Service借助標(biāo)準(zhǔn)的Intemet協(xié)議在網(wǎng)絡(luò)上調(diào)用商務(wù)邏輯。HTTP被作為Web Service傳輸?shù)幕A(chǔ)協(xié)議,這個(gè)協(xié)議使得對(duì)功能的請(qǐng)求能夠穿越各種團(tuán)體所使用的防火墻。</p><p> 2.1.4快速構(gòu)建中間層商務(wù)組件</p><p&g
35、t; Visual Studio核心目標(biāo)就是要給應(yīng)用程序提供應(yīng)用程序快速部署工具,基于服務(wù)器。利用Visual Studio.NET平臺(tái)創(chuàng)建的組件將給您的運(yùn)作提供非常棒的伸縮性和功能。</p><p> 2.1.5構(gòu)建可靠的可伸縮解決方案</p><p> 借助Visual Studio.NET,用戶可以很容易地創(chuàng)建具有可靠的和伸展能力的應(yīng)用組件和程序。</p><
36、;p> 2.2 C#技術(shù)概述</p><p> C#,這個(gè)語(yǔ)言在使得應(yīng)用程序能夠快速開發(fā)的同時(shí),并沒有抹掉C和C++程序員所在乎的一些特性。C#忠實(shí)地繼承了C和C++的優(yōu)點(diǎn)??焖賾?yīng)用程序開發(fā)(Rapid Application Development,RAD)的思想與簡(jiǎn)潔的語(yǔ)法將會(huì)使你迅速成為一名優(yōu)秀的軟件開發(fā)人員。該語(yǔ)言是專門為.NET應(yīng)用而開發(fā)出的語(yǔ)言,這從根本上保證了C#與.NET框架的完美結(jié)合。
37、在.NET運(yùn)行庫(kù)的支持下,.NET框架的各種優(yōu)點(diǎn)在C#中表現(xiàn)得很完美。</p><p> C#的一些突出的特點(diǎn):</p><p> ●精心地面向?qū)ο笤O(shè)計(jì)</p><p> ●完整的安全性與錯(cuò)誤處理</p><p><b> ●簡(jiǎn)潔的語(yǔ)法</b></p><p> ●與Web的緊密結(jié)合&l
38、t;/p><p><b> ●靈活性與兼容性</b></p><p><b> ●版本處理技術(shù)</b></p><p> 2.2.1簡(jiǎn)潔的語(yǔ)法</p><p> C#的代碼在.NET框架不允許直接地內(nèi)存操作,提供的可操縱環(huán)境下運(yùn)行,沒有了指針是它最大的特色。在C++中被經(jīng)常使用的操作符(例如:“
39、::”、“->”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個(gè)“.”。C#中,用真正的關(guān)鍵字換掉了那些把活動(dòng)模板庫(kù)(Active Template Library,ALT)和COM搞得亂糟糟的偽關(guān)鍵字,如(OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等)。C#操作符在.NET類庫(kù)中都有了新名字。</p><p> 2.2.2精心地面向?qū)ο笤O(shè)計(jì)</p><
40、p> 從Smalltalk起,面向?qū)ο蟮脑掝}始終圍繞著任何一種現(xiàn)代程序設(shè)計(jì)語(yǔ)言。C#確實(shí)具有面向?qū)ο蟮恼Z(yǔ)言所應(yīng)有的一切特性:封裝、繼承和多態(tài)性,這些也不出眾。但是通過(guò)精心地面向?qū)ο笤O(shè)計(jì),由高級(jí)商業(yè)對(duì)象到系統(tǒng)級(jí)應(yīng)用,C#建立廣泛組件的最優(yōu)選擇。在C#的類型系統(tǒng)里,每種類型都可以看成一個(gè)對(duì)象。C#提供一個(gè)叫做裝箱(boxing)和拆箱(unboxing)的機(jī)制來(lái)完成這種操作,但不會(huì)給用戶帶來(lái)困擾。C#只允許單繼承,也就是一個(gè)類不再有
41、多個(gè)基類,因而避免了類型定義的混亂。你會(huì)在繼續(xù)的學(xué)習(xí)中了解到C#中沒有了全局函數(shù),沒有全局變量,也沒有全局常數(shù)。所有必須封裝在一個(gè)類之中。你書寫的代碼會(huì)具有更好的可讀性,并且大大減少了發(fā)生命名沖突的可能性。而這整個(gè)C#的類模型是建立在.NET虛擬對(duì)象系統(tǒng)(Visual Object System,VOS)的基礎(chǔ)之上,它的對(duì)象模型是.NET基礎(chǔ)架構(gòu)的一部分,不再是它本身的組成部分。</p><p> 在VB中我們
42、得來(lái)的豐富的RAD經(jīng)驗(yàn),使得C#具備了良好的開發(fā)環(huán)境。結(jié)合自身強(qiáng)大的面向?qū)ο蟮墓δ?,C#讓開發(fā)人員的生產(chǎn)效率得到極大的提高。對(duì)于公司來(lái)說(shuō),軟件開發(fā)周期縮短會(huì)使他們更好面對(duì)網(wǎng)絡(luò)經(jīng)濟(jì)的激烈競(jìng)爭(zhēng)。在效率和功能的杠桿上人們終于找到了支點(diǎn)。</p><p> 2.3 SQL2008主要特點(diǎn)</p><p> 2.3.1 NET框架</p><p> 在SQL Serve
43、r2008中,開發(fā)人員通過(guò)運(yùn)用相似的語(yǔ)言,如微軟的VisualC#.NET與微軟的VisualBasic,將能夠創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象。開發(fā)人員還將能創(chuàng)建兩個(gè)新的對(duì)象——用戶定義的類和集合。 </p><p> 2.3.2 XML技術(shù) </p><p> 在使用本地網(wǎng)絡(luò)和互聯(lián)網(wǎng)與在不同應(yīng)用軟件之間傳輸數(shù)據(jù)的時(shí)候,可擴(kuò)展標(biāo)記語(yǔ)言(XML)是一個(gè)很重要的標(biāo)準(zhǔn)。SQL Server2008也會(huì)支持存
44、儲(chǔ)和查詢可擴(kuò)展標(biāo)記語(yǔ)言文件。 </p><p> 2.3.3 ADO.NET2.0版本</p><p> 由SQL類的新的支持,到多活動(dòng)結(jié)果集(MARS)和SQL Server2008中的ADO.NET將推動(dòng)數(shù)據(jù)集操縱和存取,實(shí)現(xiàn)更大的可升級(jí)性和便利性。 </p><p> 2.3.4增強(qiáng)的安全性</p><p> SQL Serve
45、r2008中的新型安全模式將用戶與對(duì)象分開,提供fine-grainaccess存取并允許對(duì)數(shù)據(jù)存取進(jìn)行更多的控制。所有系統(tǒng)表格會(huì)作為視圖得到實(shí)施,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)象進(jìn)行更大程度控制。 </p><p> 2.3.5 Transact-SQL的增強(qiáng)性能 </p><p> SQL Server2008為開發(fā)能夠升級(jí)的數(shù)據(jù)庫(kù)應(yīng)用軟件,提供新的語(yǔ)言功能。這增強(qiáng)的性能含錯(cuò)誤處理,功能遞歸查詢,
46、關(guān)系運(yùn)算符和其他數(shù)據(jù)列排行功能。 </p><p> 2.3.6 SQL服務(wù)中介</p><p> SQL服務(wù)中介給大型營(yíng)業(yè)范圍應(yīng)用軟件提供了一個(gè)分布式和異步應(yīng)用框架。 </p><p><b> 2.3.7通告服務(wù)</b></p><p> 通告服務(wù)使業(yè)務(wù)建立多樣的通知應(yīng)用軟件,能夠向任何設(shè)備,提供個(gè)人化以及及
47、時(shí)的信息,如股市警報(bào)、包裹遞送警報(bào)、新聞?dòng)嗛?、航空公司票價(jià)等。在SQL Server2008,通告服務(wù)與其他技術(shù)緊密地融合在了一起,這些技術(shù)包括分析服務(wù)以及SQLServerManagementStudio。 </p><p> 2.3.8 Web服務(wù) </p><p> 在SQL Server2008,開發(fā)人員能夠在數(shù)據(jù)庫(kù)層開發(fā)Web服務(wù),將SQL Server當(dāng)成一個(gè)超文本傳輸協(xié)議
48、(HTTP)的偵聽器,并且能夠?yàn)榫W(wǎng)絡(luò)服務(wù)中心應(yīng)用軟件提供一個(gè)新型的數(shù)據(jù)存取功能。 </p><p> 2.3.9報(bào)表服務(wù) </p><p> 在SQL Server2008中,報(bào)表服務(wù)能夠提供報(bào)表控制,可通過(guò)VisualStudio2010發(fā)行。 </p><p> 2.3.10全文搜索功能的增強(qiáng)</p><p> SQL Serve
49、r2008支持豐富的全文應(yīng)用軟件。服務(wù)器的編目功能將得到一定增強(qiáng),對(duì)編目對(duì)象提供了更大的靈活性。查詢性能與升級(jí)性也大幅得到改進(jìn),同時(shí)新的管理工具可以為有關(guān)全文功能的運(yùn)行,提供更深入的了解。</p><p> 2.4 C#與ADO.NET</p><p> 2.4.1 C#中的數(shù)據(jù)庫(kù)訪問(wèn)[26] </p><p> 以.NET框架編寫的(包括用C#編寫
50、的應(yīng)用程序)應(yīng)用程序需要訪問(wèn)數(shù)據(jù)庫(kù)時(shí),將使用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)。數(shù)據(jù)綁定是一種非常易用的訪問(wèn)數(shù)據(jù)庫(kù)的方法,可以減少編寫的代碼量。一些比較簡(jiǎn)單任務(wù)可以通過(guò)純粹聲明式代碼來(lái)完成。</p><p> 數(shù)據(jù)訪問(wèn)框架的ADO.NET是微軟的最新產(chǎn)物,是.NET框架的一部分。在ADO.NET使用之前,開發(fā)人員在ASP(Active Server Pages)或Visual Basic中使用ADO(AtiveX D
51、ata Objects),它是一組COM(Component Object Model,組件對(duì)象模型)組件,可以通過(guò)使用一個(gè)簡(jiǎn)單的封裝類提供對(duì)底層數(shù)據(jù)訪問(wèn)代碼的訪問(wèn)。ADO很大程度上簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問(wèn),但更高級(jí)的開發(fā)人員(特別是C++程序員)一般更喜歡使用更直接和更快的代碼,比如OLE DB(Object Linking and Embedding for Databases)代碼庫(kù)。ADO.NET比ADO的功能更加的強(qiáng)大。它在.NET代
52、碼中是訪問(wèn)數(shù)據(jù)庫(kù)的最好工具。在.NET框架里的ADO.NET類型(在System.Data命名空間和其子空間下的所有類型)含那些為了訪問(wèn)SQL Server、ODBC、OLE DB及Oracle數(shù)據(jù)庫(kù)而優(yōu)化的類型。它們基于通用類,因而使用ADO.NET訪問(wèn)不同的DBMS是相類似的。</p><p> ADO.NET類型實(shí)現(xiàn)兩個(gè)主要的功能。</p><p> ● &
53、#160; 數(shù)據(jù)表示:用于包含數(shù)據(jù)庫(kù)數(shù)據(jù)(如數(shù)據(jù)表)的類型。</p><p> ● 數(shù)據(jù)訪問(wèn):用于訪問(wèn)數(shù)據(jù)庫(kù)中數(shù)據(jù)和操作數(shù)據(jù)庫(kù)的類型;</p><p> 上面兩種類型之間聯(lián)系非常密切,在數(shù)據(jù)庫(kù)開發(fā)中兩種類型都會(huì)被用到。嚴(yán)格意義上來(lái)講,可以只用一種數(shù)據(jù)庫(kù)訪問(wèn)類型就可以了。但是,若使用數(shù)據(jù)訪問(wèn)類型來(lái)填充數(shù)據(jù)表示類型將會(huì)節(jié)省大量工作。 </p>
54、<p> ADO.NET包括7個(gè)重要的基類,其中4個(gè)為數(shù)據(jù)訪問(wèn)類:</p><p> ● DbConnection;</p><p> ● DbDataReader;</p><p> ● DbCommand;</p><p> ● DbDataAdapter。</p><p> 其
55、他3個(gè)類為數(shù)據(jù)表示類:</p><p> ● DataRelation;</p><p> ● DataTable;</p><p> ● DataSet。</p><p> DataTable類還使用了其他一些很重要的類如:DataColum、Constraint和DataRow,下面一一介紹它們。</p>
56、<p> 1)DbConnection</p><p> DbConnection類應(yīng)用與數(shù)據(jù)庫(kù)的連接。創(chuàng)建DbConnection對(duì)象的時(shí)候,應(yīng)提供和DBMS通信所需要的信息,比如數(shù)據(jù)庫(kù)的位置、密碼和用于認(rèn)證的用戶名以及要訪問(wèn)的DBMS中的數(shù)據(jù)庫(kù)。</p><p> 其他ADO.NET數(shù)據(jù)的訪問(wèn)類依靠DbConnection和數(shù)據(jù)庫(kù)進(jìn)行通信。DbConnection類的角
57、色如圖2.1所示。</p><p> 圖2.1 DbConnection類</p><p> 由DbConnection派生而來(lái)的類里,到數(shù)據(jù)庫(kù)的連接全是由連接字符串定義的,此字符串存儲(chǔ)在屬性為DbConnection.ConnectionString中。數(shù)據(jù)庫(kù)連接應(yīng)只在傳輸數(shù)據(jù)時(shí)才打開,因而創(chuàng)建DbConnection實(shí)例的時(shí)候并不是自動(dòng)連接到數(shù)據(jù)庫(kù)。DbConnecti
58、on類定義了Open()方法及Close()方法,用于控制連接什么時(shí)候能用。許多其他的ADO.NET類也能控制連接狀態(tài),如有一些類在完成操作后關(guān)閉它們所使用的連接。</p><p> DbConnection對(duì)象還可以參與事務(wù)??捎谩癉bConnection.BeginTransaction()”方法開始事務(wù),或者使用“DbConnection.EnlistTransaction()”作為已有事務(wù)的一部分執(zhí)行操
59、作。要訪問(wèn)SQL Server或SQL Server速成版中的數(shù)據(jù)時(shí),會(huì)使用SqlConnection,該類是DbConnection中的子類。一般來(lái)講,DbConnection和SqlConnection及其他子類都被稱為連接類。</p><p> 2)DbCommand</p><p> DbCommand類可以提供與數(shù)據(jù)庫(kù)交互的主要方法。用DbCommand對(duì)象來(lái)執(zhí)行SQL語(yǔ)句并
60、運(yùn)行存儲(chǔ)過(guò)程等。DbCommand和其派生類被稱為命令類。大多數(shù)情況下并不直接使用DbCommand,是用封裝DbCommand的其他對(duì)象。但有些時(shí)候要對(duì)數(shù)據(jù)庫(kù)通信實(shí)行更多的控制,此時(shí)就可以運(yùn)用DbCommand對(duì)象。</p><p> DbCommand對(duì)象的角色如圖2.2所示。</p><p> 圖2.2 DbCommand類</p><p>
61、 DbCommand中最重要的屬性應(yīng)該是DbCommand.CommandText。若要執(zhí)行SQL語(yǔ)句,就必須把語(yǔ)句文本放在此屬性中??梢杂肈bCommand.CommandType來(lái)定要執(zhí)行的語(yǔ)句類型,以DbCommand.Connection.DbCommand.Tranction來(lái)訪問(wèn)底層的連接或事務(wù)。DbCommand對(duì)象中可能會(huì)有參數(shù)化的命令字符串,命令里的參數(shù)來(lái)于類型為DbCommand. Parameters集合的屬性。它
62、和直接在命令字符串中輸入?yún)?shù)相比有非常多的優(yōu)點(diǎn)。</p><p> 如果要用DbCommand對(duì)象來(lái)執(zhí)行命令,這里有三種選擇,這取決于要執(zhí)行的命令是什么和有些命令不返回結(jié)果,該狀況下可以用“DbCommand.ExecuteNonQuery()”方法;有一些命令返回一個(gè)結(jié)果,這時(shí)候可用“DbCommand.ExecuteScalar()”方法;最后,有很多命令返回多行數(shù)據(jù),這時(shí)候可用“DbCommand. Ex
63、ecuteReader()”方法,它將會(huì)返回一個(gè)DbDataReader對(duì)象。SQL Server的DbCommand版本名是SqlCommand。它有一些特殊方法,比如SqlCommand. ExecuteXmlReader()方法,它直接是以XML格式返回結(jié)果。</p><p> 3)DbDataReader</p><p> 用DbDataReader類能夠從結(jié)果集中讀取數(shù)據(jù),像
64、是從執(zhí)行存儲(chǔ)在命令對(duì)象中的命令生成的結(jié)果集中讀取數(shù)據(jù)。此類經(jīng)過(guò)高度的優(yōu)化,能夠迅速地訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。但是這種優(yōu)化也有些不方便的情況,比如只能以串行方式一次讀取一行數(shù)據(jù)。而不能讀完兩行后然后返回去讀取第一行。一般情況下,可以用DbDataReader對(duì)象來(lái)提取將要使用的行數(shù)據(jù),并把它存儲(chǔ)在其他對(duì)象中。如能讀取一個(gè)結(jié)果集中的每行,然后將其存儲(chǔ)到在自定義集合或泛型列表對(duì)象中自定義類里。與命令對(duì)象相同,許多數(shù)據(jù)閱讀器對(duì)象是由ADO.NET命
65、名空間下的其他類使用的,用戶不必直接運(yùn)用它們。</p><p> 圖2.3說(shuō)明了如何在數(shù)據(jù)庫(kù)應(yīng)用程序里用數(shù)據(jù)閱讀器。</p><p> 圖2.3 DbDataReader類</p><p> 若要使用數(shù)據(jù)閱讀器對(duì)象,先必須要調(diào)用DbDataReader.Read()方法選擇結(jié)果集中的第一行。用戶可以不斷調(diào)用該方法來(lái)移動(dòng)數(shù)據(jù)閱讀器,使得數(shù)據(jù)閱讀器像結(jié)
66、果集中的游標(biāo)一樣總指向一行。獲取到一行的時(shí)候,Read()方法返回是true;否則返回是false—如當(dāng)所有行都已經(jīng)讀完的時(shí)候。也可用DbDataReader. HasRows屬性來(lái)判別結(jié)果集中是否還有其他行。</p><p> 當(dāng)前選中的行可用很多屬性和方法進(jìn)行檢查。DbDataReader.FieldCount查看當(dāng)前行所包含了多少列,并且用DbDataReader的重載索引器來(lái)訪問(wèn)各列。若知道將要訪問(wèn)的列
67、名,還可以使用基于整數(shù)的索引器通過(guò)位置來(lái)獲得列,可以用基于字符串的索引器來(lái)獲得列值。在兩種情況下,該方法都將返回object值,可把其轉(zhuǎn)化為其他類型的數(shù)據(jù)。還可用DbDataReader提供的多個(gè)方法來(lái)直接獲得類型化的數(shù)據(jù),比如GetInt32()和GetString()是分別將指定列以int和string值返回,列由其索引選擇。要用這些方法取得值類型,那必須先要使用DbDataReader.IsDBNull檢查空值;否則,空值將會(huì)引發(fā)
68、異常。檢查空值是非常關(guān)鍵的步驟,因?yàn)槿魏螖?shù)據(jù)庫(kù)類型都可以為空。而這與.NET中的值類型不同,可以為空的值類型比如int,在這種上下文環(huán)境中是不被支持的。DbDataReader也可以夠獲得關(guān)于它包含的數(shù)據(jù)的元信息—使用DbDataReader.GetSchema Table()方法,這樣做就能夠知道列的名稱、數(shù)據(jù)類型以及其他信息,比如列是否包含空值等。</p><p> 與前面的其他類一樣,也有專門用于SQL
69、Server的數(shù)據(jù)閱讀器類,這就是SqlDataReader,本書將使用該類。該類繼承DbDataReader,提供將數(shù)據(jù)讀取為本地SQL類型的方法,這樣就能夠避免空類型的問(wèn)題。這些類型包含在System.Data.Sqltypes命名空間中,是可為空的;如SqlDouble和SqlInt32。雖然這些類型也可以像標(biāo)準(zhǔn)的值類型那樣進(jìn)行操作,但它們實(shí)際上是引用類型。</p><p> 4)DbDataAdapte
70、r</p><p> 在ADO.NET中,最核心的數(shù)據(jù)訪問(wèn)類是DbDataAdapter類。該類設(shè)計(jì)的目的只有一個(gè)即減少存儲(chǔ)在數(shù)據(jù)集對(duì)象中的數(shù)據(jù)和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換時(shí)的干擾,而它比前面介紹過(guò)的類型要復(fù)雜很多;與前面的類相同的是DbDataAdapter類也有很多派生類,它們被稱為數(shù)據(jù)適配器類。DbDataAdapter最關(guān)鍵的特性之一在于用于傳輸數(shù)據(jù)的命令對(duì)象被檢測(cè)出來(lái),因而可以針對(duì)需要對(duì)它們進(jìn)行定制。<
71、/p><p> 圖2.4說(shuō)明了DbDataAdapter類的工作原理,包含它包括的命令對(duì)象。</p><p> 圖2.4 DbDataAdapter類</p><p> 數(shù)據(jù)適配器使用了4個(gè)命令對(duì)象,而每個(gè)命令對(duì)象分別存儲(chǔ)在對(duì)應(yīng)的屬性中:SelectCommand——用于查詢數(shù)據(jù)、UpdateCommand——用于編輯數(shù)據(jù)、InsertCommand—
72、—用于添加數(shù)據(jù)和DeleteCommand——用于刪除數(shù)據(jù)。要使用適配器,并不是要全部用到這4個(gè)屬性,比如可以只用適配器來(lái)查詢數(shù)據(jù)。.NET框架能夠根據(jù)其他命令的值推斷出命令的值,比如可以根據(jù)查詢命令生成更新的插入和刪除命令。在數(shù)據(jù)適配器中,最常用的兩個(gè)方法是DbDataAdapter.Update()和DbDataAdapter.Fill()。Update()方法更新數(shù)據(jù)庫(kù)中的數(shù)據(jù);Fill()方法從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。這兩個(gè)方法都可以
73、用于數(shù)據(jù)集或者是單個(gè)數(shù)據(jù)表。還可以用DbDataAdapter.FillSchema()獲取架構(gòu)數(shù)據(jù)。SQL Server中的“DbDataAdapter”版本是Sql DbDataAdapter。</p><p> 5)DataTable</p><p> DataTable為ADO.NET提供出來(lái)的第一個(gè)數(shù)據(jù)表示類。這與數(shù)據(jù)訪問(wèn)類是不同,數(shù)據(jù)表示類沒有特定用于專門數(shù)據(jù)庫(kù)管理系統(tǒng)的子
74、類,它們是獨(dú)立在平臺(tái)。一般來(lái)說(shuō),若是需要的話,數(shù)據(jù)表示類是完全可以獨(dú)立于數(shù)據(jù)庫(kù)使用。這個(gè)DataTable類是用于存儲(chǔ)數(shù)據(jù)表。DataTable對(duì)象存儲(chǔ)的表不是一定要映射到數(shù)據(jù)庫(kù)中的表,因?yàn)镈ataTable可能包含表中數(shù)據(jù)的一個(gè)子集,而這個(gè)子集可能只包含數(shù)據(jù)庫(kù)表的部分列、部分行。</p><p> 圖2.5說(shuō)明了DataTable與其他ADO.NET對(duì)象之間的關(guān)系。</p><p>
75、 圖2.5 DataTable</p><p> 使用數(shù)據(jù)適配器來(lái)獲得完全填充的DataTable,含數(shù)據(jù)DataTable了,就能夠訪問(wèn)行、列、約束以及它包含的其他信息。這些信息可以通過(guò)命名屬性來(lái)訪問(wèn),包括Columns、Rows和Contraints等。上面所說(shuō)的3個(gè)屬性都會(huì)返回一個(gè)集合類如“DataRowCollection、DataColumnCollection和ConstaintColl
76、ection”對(duì)象。和其他集合類相同,這些類可以用在它們所包含的對(duì)象集合中進(jìn)行導(dǎo)航,添加或刪除項(xiàng)等。</p><p> DataTable類另外一個(gè)非常重要的方面就是如何處理和修改數(shù)據(jù)等。比如,如果要?jiǎng)h除DataTable中的某一行,數(shù)據(jù)適配器怎樣才知道在數(shù)據(jù)庫(kù)中刪除對(duì)應(yīng)的數(shù)據(jù)?因?yàn)镈ataTable對(duì)象記錄原始數(shù)據(jù)的修改,不是數(shù)據(jù)的當(dāng)前狀態(tài)。從DataTable中刪除一行并不是一下子刪除這些數(shù)據(jù),只是把數(shù)據(jù)標(biāo)
77、記為已刪除。</p><p> 不管何時(shí)都可以使用GetChanges()方法來(lái)獲得對(duì)DataTable對(duì)象所做的列表進(jìn)行修改。再一些情況下可以使用AcceptChanges()方法接受已經(jīng)做的修改,從而覆蓋原來(lái)有的數(shù)據(jù)。如可以在修改提交到數(shù)據(jù)庫(kù)后這樣做或者使用RejectChanges()撤銷所有的修改或者當(dāng)最終用戶單擊“取消”按鈕時(shí)。</p><p> DataTable對(duì)象也表露
78、了許多事件,可以在應(yīng)用程序中定制這些事件,比如ColumnChanged和RowDeleted。</p><p> ?。?)DataColumn</p><p> DataColumn存儲(chǔ)了在數(shù)據(jù)表中定義的列所需的所有的信息。Columns屬性包括一個(gè)DataColumnCollection,是個(gè)DataColumn對(duì)象集合。DataColumn還包含與DBMD相匹配的屬性,包含Colu
79、mnName、AllowDBNull、Dataype和DefaultValue。</p><p> (2)Constaint</p><p> Constaint對(duì)象用于包含表的所有元數(shù)據(jù)(這些數(shù)據(jù)不包含在DataColumn對(duì)象中)。Constaint類作為更為具體類的基類,具體類包含UniqueConstaint—用于確保給定列或者是列組合的值,是唯一的ForeingKeyCons
80、taint—用于去實(shí)現(xiàn)表之間的關(guān)系。</p><p> ?。?)DataRow</p><p> DataRow類是用于存儲(chǔ)表中一行包含的數(shù)據(jù)。通過(guò)DataTable.Rows屬性能夠訪問(wèn)到DataRow Collection對(duì)象,而后者存儲(chǔ)了組成表數(shù)據(jù)的多個(gè)DataRow對(duì)象。通過(guò)索引器來(lái)訪問(wèn)一行數(shù)據(jù)中的各列,索引器能夠讓你通過(guò)列名、版本和索引來(lái)訪問(wèn)列。行是否被修改、刪除或以其他方式改
81、變,可以通過(guò)DataRowState的屬性來(lái)訪問(wèn),這個(gè)屬性的值為DataRowState類型,是種包含所有可能行狀態(tài)的枚舉類型。各個(gè)DataRow對(duì)象也會(huì)有與DataTable對(duì)應(yīng)的方法,被用于接受、獲得更改和拒絕。比如可以推斷出調(diào)用DataTable. AcceptChanges()將級(jí)聯(lián)地對(duì)表的每行進(jìn)行調(diào)用DataRow AcceptChanges()。</p><p> 4)DataRelation<
82、;/p><p> 當(dāng)處理多個(gè)DataTable對(duì)象的時(shí)候,通常需要搭建表數(shù)據(jù)之間的關(guān)系。這個(gè)工作是由DataRelation類來(lái)完成。它可以將多個(gè)DataRelation對(duì)象進(jìn)行組合起來(lái),構(gòu)成了一個(gè)DataRelationCollection對(duì)象。關(guān)系可用到DataRelation類的多個(gè)屬性來(lái)進(jìn)行定義包括(ChildTable、ChildKeyConstraint、ChildColumns、ParentTable
83、和ParentKeyConstraint等)。這些屬性都是對(duì)相應(yīng)的對(duì)象的進(jìn)行引用,(如DataTable和DataColumn)對(duì)象。關(guān)系名也存儲(chǔ)在DataRelation.RelationName屬性中。關(guān)于DataRelation對(duì)象,它們封裝了ADO.NET比較高級(jí)的方面。</p><p><b> 5)DataSet</b></p><p> ADO.NE
84、T中最重要的類即DataSet。從某種意義上來(lái)說(shuō),該類只是DataRelation對(duì)象和DataTable對(duì)象的集合如圖2.6所示。</p><p> 圖2.6 DataSet類</p><p> 而DataSet的強(qiáng)大功能則主要體現(xiàn)在和其他對(duì)象的結(jié)合使用,包含用Windows應(yīng)用程序的控件和在Web應(yīng)用程序以及XML文檔Web服務(wù)。DataSet類還包含很多屬性以及方法;而且其中很多
85、和它組成部分的屬性和方法相類似,如RejectChanges()和GetChanges()。還有一些非常重要的屬性,比如Tables“以DataTableCollection類的形式包含DataSet中的表集合、Relations包含一個(gè)DataRelation Collection類,其中的Relation對(duì)象定義了表之間的關(guān)系”。數(shù)據(jù)表之間的關(guān)系以及應(yīng)用在數(shù)據(jù)的約束中使得對(duì)DataSet的操作很麻煩。若是兩個(gè)表之間存在一對(duì)多的關(guān)系的
86、話,則需要添加一行到其中一個(gè)表中,這可能要求另一個(gè)表中存在一行。而如果這行可能不存在,在這個(gè)時(shí)候?yàn)楸苊忮e(cuò)誤,則需要添加這些行的順序會(huì)非常重要,在此之前必須先添加位于關(guān)系“一”端的行。我們也可以將DataSet.Enforce Constraints屬性改為false,這樣在執(zhí)行編輯操作的時(shí)候?qū)?huì)忽略關(guān)系。</p><p> ?。?)XML與DataSet對(duì)象之間的關(guān)系</p><p>
87、和ADO.NET的其他對(duì)象相同,設(shè)計(jì)DataSet對(duì)象時(shí)也應(yīng)該考慮XML數(shù)據(jù)。使用DataSet. GetXml()方法可以將數(shù)據(jù)集轉(zhuǎn)換為XML文檔;還可使用DataSet.GetXmlSchema()方法僅僅提取數(shù)據(jù)集中的架構(gòu)其中包括數(shù)據(jù)集包含的所有表和其他對(duì)象的架構(gòu)作為XML文檔;也還可以使用序列化技術(shù)在XML文檔和DataSet之間進(jìn)行轉(zhuǎn)換,由于DataSet類實(shí)現(xiàn)了IxmlSeria- lizable接口。XML與DataSet
88、對(duì)象之間的關(guān)系以及使用序列化在這兩種表示格式之間可以進(jìn)行轉(zhuǎn)換,在.NET框架中運(yùn)用非常廣泛。它確實(shí)提供了一種通過(guò)Internet交換數(shù)據(jù)和在應(yīng)用程序?qū)又g的很有效的方法。關(guān)鍵是有了數(shù)據(jù)集的XML表示形式后,我們就可在Web服務(wù)之間交換DataSet對(duì)象。</p><p> (2)類型化數(shù)據(jù)集(typed data set)</p><p> DataSet對(duì)象的功能雖然很強(qiáng)大,但它們并
89、不是符合邏輯或是最容易使用的。若是要訪問(wèn)表中的特定行,使用它會(huì)顯得非常不好用。所以必須使用DataSet.Tables集合來(lái)獲得正確的表,用DataTable.Rows集合來(lái)獲得正確的行,然后再通過(guò)DataColumn的方法或是以引用對(duì)象的形式提取列數(shù)據(jù)。訪問(wèn)特定列的代碼行則如下所示:</p><p> int result = (int)myDataSet.Tables["myTable"
90、].Rows[5][ "IntegerColumn"];</p><p> 另外一種方法,那就是使用的類型化數(shù)據(jù)集。類型化數(shù)據(jù)集則是DataSet的子類,但是它包含強(qiáng)類型方法屬性,使數(shù)據(jù)操作能夠更容易。若是使用類型化數(shù)據(jù)集,上面的代碼就可簡(jiǎn)化為如下所示:</p><p> int result = myTypedDataSet.MyTable[5].IntegerC
91、olumn;</p><p> 這并不影響代碼的功能,但是卻使得輸入更容易,尤其是在啟用了智能感知功能的時(shí)候,以便于以后閱讀代碼。唯一不足之處是,需要在設(shè)計(jì)時(shí)就必須知道數(shù)據(jù)集中將會(huì)包含的數(shù)據(jù)的結(jié)構(gòu)。但是因?yàn)閿?shù)據(jù)庫(kù)的結(jié)構(gòu)不太會(huì)有很大的改變,因而不會(huì)出現(xiàn)什么狀況。可以通過(guò)Visual C#速成版界面或使用xsd.exe工具自動(dòng)創(chuàng)建類型化數(shù)據(jù)集。Visual C#速成版在創(chuàng)建類型化數(shù)據(jù)集的時(shí)候也要使用架構(gòu)信息,但是它
92、直接從數(shù)據(jù)庫(kù)獲取這些信息,這會(huì)使得對(duì)數(shù)據(jù)集的結(jié)構(gòu)進(jìn)行操作的更容易些。xsd.exe工具需要提供一個(gè)架構(gòu)(schema),這會(huì)是以擴(kuò)展名為.xsd的XML架構(gòu)文件來(lái)提供的。</p><p><b> ?。?)性能</b></p><p> 部分人不喜歡使用數(shù)據(jù)集,這由于它們可能是“重量級(jí)”對(duì)象,所以帶來(lái)的開銷在高性能應(yīng)用程序中也許會(huì)很大。而且以數(shù)據(jù)集的形式通過(guò)Web傳
93、輸數(shù)據(jù),這也許意味著要傳輸大量的XML數(shù)據(jù)。所以這些顧慮是可以理解的。如果非常在乎性的話,可以建立自己特有的類,并且直接使用數(shù)據(jù)閱讀器所提供的數(shù)據(jù)來(lái)進(jìn)行填充。但是這些數(shù)據(jù)集也有它們獨(dú)特的用處。如只需少量代碼就能夠使用這些特性,而且操作它們的代碼一般都非常簡(jiǎn)單。若是無(wú)數(shù)據(jù)集,那么要表示數(shù)據(jù)庫(kù)中的數(shù)據(jù),同時(shí)還要在類中記錄所有編輯,并且這些編輯也可以很容易,順利地傳輸?shù)綌?shù)據(jù)庫(kù),也許會(huì)需要大量的代碼,而且實(shí)現(xiàn)起來(lái)也可能會(huì)非常困難。</p&
94、gt;<p> 2.4.2 數(shù)據(jù)綁定</p><p> 數(shù)據(jù)綁定幫助程序員可以做少量工作就能夠用數(shù)據(jù)庫(kù)中的數(shù)據(jù)填充Windows或的一種技術(shù)。.NET框架讓程序員只需使用簡(jiǎn)單的代碼就可以Web控件或者是將數(shù)據(jù)源控件關(guān)聯(lián)起來(lái),事實(shí)上也可以通過(guò)GUI實(shí)現(xiàn)很多功能,而且用簡(jiǎn)單的代碼實(shí)現(xiàn)。數(shù)據(jù)綁定有以下兩點(diǎn)的要求:要綁定數(shù)據(jù)的控件和數(shù)據(jù)源。數(shù)據(jù)源則包含數(shù)據(jù)庫(kù)連接,但是不僅僅局限在這里,還可以使用來(lái)自We
95、b服務(wù)的數(shù)據(jù)或者對(duì)象作為數(shù)據(jù)源。其中使用對(duì)象作為數(shù)據(jù)源是一種功能強(qiáng)大、便捷的方法,也還可以利用自己設(shè)計(jì)的類和自定義的集合。</p><p> 當(dāng)生成數(shù)據(jù)庫(kù)數(shù)據(jù)源的時(shí)候,通常不只是需要配置連接。數(shù)據(jù)庫(kù)數(shù)據(jù)源還包括著關(guān)于要訪問(wèn)數(shù)據(jù)庫(kù)中什么對(duì)象的信息。但實(shí)際情況下,在幕后一般將會(huì)生成類型化數(shù)據(jù)集。幕后還將會(huì)用到前面介紹的ADO.NET對(duì)象的連接、數(shù)據(jù)閱讀器、命令和數(shù)據(jù)適配器協(xié)同工作來(lái)創(chuàng)建數(shù)據(jù)源。編程人員不需要擔(dān)心,只
96、需創(chuàng)建一個(gè)數(shù)據(jù)源并將它綁定在控件,如圖2.7所示。</p><p> 圖2.7 數(shù)據(jù)綁定</p><p> 若要綁定到控件,則還需要將控件的屬性設(shè)置為數(shù)據(jù)源的元素。對(duì)于一些簡(jiǎn)單的控件,只需要將控件的Text屬性改為數(shù)據(jù)庫(kù)中類型為文本列。也還可將數(shù)據(jù)綁定到列表控件其中包括下拉列表,這樣的列表中的每項(xiàng)都需要綁定到數(shù)據(jù)庫(kù)表中的每一行。而更高級(jí)的控件(如GridView)可以查看整
97、個(gè)表的內(nèi)容。也可以自定義的數(shù)據(jù)以及提供自定義的控件綁定架構(gòu),方便使用和編輯數(shù)據(jù)庫(kù)中的數(shù)據(jù)。</p><p><b> 2.5 SQL語(yǔ)言</b></p><p> SQL是一種可以處理數(shù)據(jù)的高級(jí)語(yǔ)言,在查詢數(shù)據(jù)時(shí),只需要指出要什么,不用指出如何實(shí)現(xiàn)的過(guò)程。SQL語(yǔ)言包括數(shù)據(jù)定義、操縱、查詢和控制等功能。SQL語(yǔ)言的語(yǔ)法格式非常簡(jiǎn)單,使用起來(lái)方便、靈活。我們通用的S
98、QL語(yǔ)言,最早于1974年提出的,在當(dāng)時(shí)被稱為SEQUEL語(yǔ)言,而在后來(lái)被國(guó)際標(biāo)準(zhǔn)化組織ISO采納為國(guó)際標(biāo)準(zhǔn)后,所以現(xiàn)在大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)則都會(huì)支持SQL語(yǔ)言。</p><p> 2.5.1表定義語(yǔ)句</p><p> 廣義上講,表定義語(yǔ)句包括數(shù)據(jù)表的創(chuàng)建語(yǔ)句(Create語(yǔ)句)、數(shù)據(jù)表修改語(yǔ)句(Alter語(yǔ)句)和數(shù)據(jù)表刪除語(yǔ)句(Drop語(yǔ)句)。</p><p&g
99、t; 2.5.2視圖定義語(yǔ)句</p><p> 因?yàn)橐晥D是對(duì)數(shù)據(jù)表中數(shù)據(jù)的一種顯示方式,所以用一個(gè)數(shù)據(jù)表會(huì)有多個(gè)視圖。因而要根據(jù)用戶的不同需求,要將數(shù)據(jù)表中用戶所在乎的數(shù)據(jù)提取出來(lái),提供給用戶而忽略數(shù)據(jù)表中其他數(shù)據(jù)。所以視圖也可以被理解為一種預(yù)先定義好的查詢。查詢的優(yōu)點(diǎn)其實(shí)在于可以在多個(gè)數(shù)據(jù)表之間按照指定的條件對(duì)數(shù)據(jù)進(jìn)行篩選并且顯示出來(lái)。</p><p> 2.5.3索引定義語(yǔ)句&l
100、t;/p><p> 加速數(shù)據(jù)查詢的重要手段即是索引,如果索引一旦被建立起來(lái),那么就將成為數(shù)據(jù)庫(kù)的一部分,并且要占用數(shù)據(jù)庫(kù)的存儲(chǔ)空間。索引最重要的優(yōu)點(diǎn)就是加快數(shù)據(jù)的查詢速度,但對(duì)于數(shù)據(jù)的插入、刪除以及修改操作來(lái)說(shuō),索引確實(shí)能夠降低了執(zhí)行效率。</p><p> 2.5.4數(shù)據(jù)操縱語(yǔ)句</p><p> 數(shù)據(jù)操縱含數(shù)據(jù)的更新、插入和刪除等操作,數(shù)據(jù)操縱語(yǔ)句則是應(yīng)用程序
101、編制中使用特別多的語(yǔ)句之一。</p><p> 2.5.5 INSERT語(yǔ)句</p><p> INSERT語(yǔ)句所能夠?qū)崿F(xiàn)的功能是向數(shù)據(jù)庫(kù)中插入新的數(shù)據(jù),而這個(gè)語(yǔ)句的一般語(yǔ)法如下:</p><p> Insert into tableName</p><p> [ (fieldList)]</p><p>
102、values(valueList)</p><p> 2.5.6 UPDATE語(yǔ)句</p><p> UPDATE語(yǔ)句一般用于更新數(shù)據(jù)表中的數(shù)據(jù)。更新則是指數(shù)據(jù)已經(jīng)存在于數(shù)據(jù)表中,但是需要對(duì)其中的數(shù)據(jù)進(jìn)行修改,這樣才可以使用UPDATE語(yǔ)句來(lái)實(shí)現(xiàn)。</p><p> 2.5.7 DELETE語(yǔ)句</p><p> 使用DELETE語(yǔ)句
103、可以使得某些數(shù)據(jù)從數(shù)據(jù)表中刪除,此語(yǔ)句的基本語(yǔ)法如下:</p><p> Delete from tableName [Where select_conditon]</p><p><b> 2.5.8查詢語(yǔ)句</b></p><p> SQL語(yǔ)言中使用最為頻繁的語(yǔ)句是查詢語(yǔ)句,查詢可以根據(jù)需要多個(gè)數(shù)據(jù)表或者在數(shù)據(jù)表之間進(jìn)行數(shù)據(jù)篩選。如果
104、能夠熟練掌握數(shù)據(jù)查詢語(yǔ)句,這樣才能編寫出高質(zhì)量的數(shù)據(jù)庫(kù)管理軟件。查詢則是SQL語(yǔ)言中最核心的功能之一,在SQL語(yǔ)言中是通過(guò)Select語(yǔ)句來(lái)實(shí)現(xiàn)查詢功能的,SQL查詢語(yǔ)句結(jié)構(gòu)如下:</p><p> Select字段列表 From表名</p><p><b> 2.5.9條件查詢</b></p><p> Select語(yǔ)句可以對(duì)字段進(jìn)行篩
105、選以及對(duì)記錄進(jìn)行篩選和操作,這時(shí)候會(huì)用到Where字句。而Where子句在Select語(yǔ)句中則是用于指定查詢條件,而且其結(jié)構(gòu)一般如下:</p><p> Select 字段列表 from 表名 Where 條件表達(dá)式</p><p> 2.5.10查詢排序</p><p> SQL語(yǔ)句對(duì)查詢的結(jié)果進(jìn)行排序,這時(shí),肯要用到Order by子句。還要可能會(huì)用到兩個(gè)
106、負(fù)責(zé)排序方式的關(guān)鍵詞DES和CASC,其中ASC指的是明按升序排列查詢結(jié)果;而DESC則是指明按降序進(jìn)行排列。排序查詢的結(jié)構(gòu)如下:</p><p> Select fieldlist From tableName</p><p> [Where select_conditon]</p><p> Order by field1 [ASC|DESC],field
107、2 [ASC|DESC]</p><p> 2.5.11統(tǒng)計(jì)查詢</p><p> SQL語(yǔ)言對(duì)數(shù)值型的字段有著統(tǒng)計(jì)的功能,該功能用到5個(gè)統(tǒng)計(jì)函數(shù),如:(Count(*)——統(tǒng)計(jì)符合查詢條件的記錄的個(gè)數(shù);AVG(field)——計(jì)算某個(gè)數(shù)值型字段的平均值;Min(field)——返回某個(gè)數(shù)值型字段的最小值;Max(field)——返回某個(gè)數(shù)值型字段的最大值;Sum(field)——計(jì)算
108、某個(gè)數(shù)值型字段所有記錄的和)。</p><p> 2.5.12Group by子句</p><p> Group by子句的主要作用則是將查詢結(jié)果中的數(shù)據(jù)按照指定字段分組,Group by子句常與統(tǒng)計(jì)函數(shù)一起來(lái)使用,以便于對(duì)查詢數(shù)據(jù)實(shí)現(xiàn)分組統(tǒng)計(jì)。Group by子句的語(yǔ)法如下:</p><p> Group by 字段1,字段2</p><
109、p> 2.5.13Distinct關(guān)鍵詞</p><p> 由于使用Distinct關(guān)鍵字可以避免查詢結(jié)果中出現(xiàn)重復(fù)的記錄,因?yàn)樵跀?shù)據(jù)表的某個(gè)字段中可能會(huì)出現(xiàn)多個(gè)重復(fù)的值。Distinct關(guān)鍵詞的SQL語(yǔ)句結(jié)構(gòu)如下:</p><p> Select Distinct 字段名列表 From 表名 Where 條件表達(dá)式</p><p> 2.5.14 T
110、op關(guān)鍵詞</p><p> Top關(guān)鍵詞的作用則是限制查詢結(jié)果的返回的數(shù)目。該關(guān)鍵詞常會(huì)被用來(lái)限制顯示查詢結(jié)果中的前百分之多少或者是前多少個(gè)的記錄。因而Top關(guān)鍵詞經(jīng)常與Order by子句一并出現(xiàn)。Top關(guān)鍵詞的語(yǔ)法:</p><p><b> Top n</b></p><p> Top n Percent</p>&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品工程畢業(yè)論文合理飲食健康對(duì)人體的重要性
- 論合理營(yíng)養(yǎng)對(duì)人體健康的影響畢業(yè)論文
- 畢業(yè)論文淺談食品添加劑與人體健康
- 食品工程畢業(yè)論文-老年人飲食營(yíng)養(yǎng)與健康
- 飲食文化畢業(yè)論文
- 中韓飲食禮儀對(duì)比畢業(yè)論文
- 中韓飲食禮儀對(duì)比畢業(yè)論文
- 畢業(yè)論文_健康信息管理系統(tǒng)
- 畢業(yè)論文_健康信息管理系統(tǒng)
- 飲食與健康論文
- 中西飲食文化畢業(yè)論文
- 網(wǎng)球運(yùn)動(dòng)對(duì)中年人體質(zhì)健康的影響畢業(yè)論文
- 人體行為檢測(cè)和識(shí)別-畢業(yè)論文
- 人體感應(yīng)開關(guān)的設(shè)計(jì)畢業(yè)論文
- 日本飲食文化 畢業(yè)論文1
- 人體姿態(tài)估計(jì)的研究-畢業(yè)論文
- 中韓飲食禮儀對(duì)比應(yīng)用韓語(yǔ)畢業(yè)論文
- 中韓飲食禮儀對(duì)比應(yīng)用韓語(yǔ)畢業(yè)論文
- 畢業(yè)論文----樓道人體紅外感應(yīng)系統(tǒng)的研究
- 心理健康畢業(yè)論文
評(píng)論
0/150
提交評(píng)論