版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p><b> 企業(yè)人事管理系統(tǒng)的</b></p><p><b> 設(shè)計(jì)與實(shí)現(xiàn)</b></p><p><b> 摘 要</b></p><p> 當(dāng)今,互聯(lián)網(wǎng)空前發(fā)展,給人
2、們的工作和生活帶來(lái)了極大的便利和效率的提高,電子化,信息化已經(jīng)成為提高工作效率,節(jié)約運(yùn)營(yíng)成本的首選??紤]到當(dāng)前大量企業(yè)的人事管理尚處于手工作業(yè)階段,不但效率低,還常常因?yàn)楣芾淼牟簧鞫霈F(xiàn)問(wèn)題。因此根據(jù)部分企業(yè)提供的需求,設(shè)計(jì)此企業(yè)人事管理系統(tǒng),以幫助企業(yè)達(dá)到人事管理辦公自動(dòng)化、節(jié)約管理成本、提高企業(yè)工作效率的目的。</p><p> 本企業(yè)人事管理系統(tǒng)采用C/S結(jié)構(gòu),主要對(duì)企業(yè)員工的信息以及相關(guān)的工作流程進(jìn)行集
3、中的管理,方便企業(yè)建立一個(gè)完善的、強(qiáng)大的員工信息數(shù)據(jù)庫(kù)。它以.NET2005和SQL 2005數(shù)據(jù)庫(kù)作為開發(fā)平臺(tái)。使用C# 設(shè)計(jì)操作控件和編寫操作程序,完成數(shù)據(jù)輸入、修改、存儲(chǔ)、調(diào)用查詢等功能;并使用SQL 2005數(shù)據(jù)庫(kù)形成數(shù)據(jù)表,進(jìn)行數(shù)據(jù)存儲(chǔ)。</p><p> 本文詳細(xì)介紹了企業(yè)人事管理系統(tǒng)的功能需求,系統(tǒng)設(shè)計(jì)和具體實(shí)現(xiàn)。</p><p> 關(guān)鍵詞 企業(yè)人事管理系統(tǒng);
4、C/S;員工信息數(shù)據(jù)庫(kù)</p><p> The Design and Implementation of Enterprise Personnel Management System Based on C/S</p><p><b> Abstract</b></p><p> Nowadays, the unprecedented d
5、evelopment of Internet has brought us great convenience and efficiency. Informatization and electronization become the preference of saving operation cost and improving work efficiency. Many enterprises still depend on l
6、abor to manage theirs personnel which should be named as inefficient and unreliable. Thus, this PMS(Personnel Management System)is designed to make the personnel administration more scientific, normative and effici
7、ent.</p><p> This system adopts the structure mode of client/server(C/S), Windows XP as the operation system,SQL 2005 as the background database, and Microsoft Visual Studio.NET 2005 as the developing tool.
8、 It can help enterprises to establish a perfect, strong staff information database, which facilitates the centralized management of staff information . Use C# to design and operate the controls and writing, to finishe th
9、e functions of entering data, store and query; use sql 2005 database tables to maintain</p><p> The thesis explains the course design, system design and implementation of PMS.</p><p> Key word
10、s: Personnel Management System; C/S; Employee Information Database</p><p> 企業(yè)人事管理系統(tǒng)2</p><p><b> 1前言2</b></p><p> 1.1 目的與意義2</p><p> 1.2 人事管理系統(tǒng)發(fā)展趨勢(shì)3
11、</p><p> 1.2.1世界趨勢(shì)3</p><p> 1.2.2技術(shù)革新3</p><p> 1.3 系統(tǒng)調(diào)研4</p><p> 1.3.1 社會(huì)可行性分析4</p><p> 1.3.2 技術(shù)可行性分析4</p><p> 1.3.3 經(jīng)濟(jì)可行性分析5</
12、p><p> 1.3.4 管理可行性分析5</p><p> 1.4 研究?jī)?nèi)容5</p><p> 2開發(fā)工具及其語(yǔ)言特點(diǎn)5</p><p> 2.1 Visual Studio.NET主要特點(diǎn)如下5</p><p> 2.2.1簡(jiǎn)潔的語(yǔ)法7</p><p> 2.2.2精心地
13、面向?qū)ο笤O(shè)計(jì)7</p><p> 2.2.3與Web的緊密結(jié)合8</p><p> 2.2.4完整的安全性與錯(cuò)誤處理9</p><p> 2.2.5版本處理技術(shù)9</p><p> 2.2.6靈活性和兼容性10</p><p> 3.1SQL2005主要特點(diǎn)10</p><p&
14、gt; 3.1.1.NET框架10</p><p> 3.1.2XML技術(shù)11</p><p> 3.1.3ADO.NET2.0版本11</p><p> 3.1.4增強(qiáng)的安全性11</p><p> 3.1.5Transact-SQL的增強(qiáng)性能11</p><p> 3.1.6SQL服務(wù)中介1
15、1</p><p> 3.1.7通告服務(wù)11</p><p> 3.1.8Web服務(wù)12</p><p> 3.1.9報(bào)表服務(wù)12</p><p> 3.1.10全文搜索功能的增強(qiáng)12</p><p> 3.2C#與ADO.NET12</p><p> 3.2.1
16、; C#中的數(shù)據(jù)庫(kù)訪問(wèn)12</p><p> 3.2.2 數(shù)據(jù)綁定23</p><p> 3.3 SQL語(yǔ)言24</p><p> 3.3.1表定義語(yǔ)句24</p><p> 3.3.2視圖定義語(yǔ)句24</p><p> 3.3.3索引定義語(yǔ)句24</p><p> 3
17、.3.4數(shù)據(jù)操縱語(yǔ)句24</p><p> 3.3.5INSERT語(yǔ)句25</p><p> 3.3.6UPDATE語(yǔ)句25</p><p> 3.3.7DELETE語(yǔ)句25</p><p> 3.3.8查詢語(yǔ)句25</p><p> 3.3.9條件查詢25</p><p>
18、; 3.3.10查詢排序26</p><p> 3.3.11統(tǒng)計(jì)查詢26</p><p> 3.3.12Group by子句26</p><p> 3.3.13Distinct關(guān)鍵詞26</p><p> 3.3.14Top關(guān)鍵詞26</p><p> 3.3.15多表查詢27</p>
19、;<p> 3.3.16多重查詢27</p><p> 3.3.17EXISTS關(guān)鍵詞27</p><p> 4系統(tǒng)需求分析27</p><p> 4.1系統(tǒng)流程圖如下27</p><p><b> 5 致謝49</b></p><p> 附錄F 各模塊實(shí)現(xiàn)的
20、主要源代碼50</p><p> F1.1登錄模塊的設(shè)計(jì)與實(shí)現(xiàn)的主要代碼50</p><p><b> }51</b></p><p> F1.2登陸實(shí)體類:51</p><p> F1.3 員工管理模塊的設(shè)計(jì)與實(shí)現(xiàn)的主要代碼52</p><p> F1.3.1員工管理實(shí)現(xiàn)的
21、主要代碼:52</p><p> F1.3.2 部門管理實(shí)現(xiàn)主要代碼:53</p><p><b> }55</b></p><p> F1.3.3工資管理主要代碼:55</p><p><b> }59</b></p><p> F1.3.4考勤信息設(shè)
22、計(jì)與實(shí)現(xiàn)主要代碼:59</p><p><b> }62</b></p><p> F1.4 數(shù)據(jù)訪問(wèn)類:62</p><p><b> }65</b></p><p> F1.5生日提醒主要代碼:65</p><p> F1.6啟動(dòng)第三方EXE文件操作類
23、:65</p><p><b> }66</b></p><p><b> 企業(yè)人事管理系統(tǒng)</b></p><p><b> 1前言</b></p><p><b> 1.1 目的與意義</b></p><p> 人
24、的管理是管理工作的核心。員工代表一個(gè)企業(yè)的形象,因而人事管理機(jī)制的好壞,影響一個(gè)企業(yè)的成敗。 員工的檔案管理是企業(yè)人事管理的基礎(chǔ),在企業(yè)員工普遍流失的今天,一個(gè)準(zhǔn)確而及時(shí)的人事管理系統(tǒng),有利于人事部門對(duì)員工流動(dòng)進(jìn)行分析、編制,為企業(yè)所需人員提供了保障。</p><p> 人力資源部那些重復(fù)的,事務(wù)性的工作交給HRP(Human Resource Planning,人力資源管理系統(tǒng))來(lái)解決,可以省去用戶以
25、往人力資源管理工作的繁瑣、枯燥;用領(lǐng)先的人力資源管理理念,把人力資源管理的作業(yè)流程控制和戰(zhàn)略規(guī)劃設(shè)計(jì)巧妙地集合于一體;系統(tǒng)重點(diǎn)涉及到人力資源管理工作中的薪資、考勤、績(jī)效、調(diào)動(dòng)、基本信息、用戶管理以及用戶切換等方面,并有綜合的系統(tǒng)安全設(shè)置、報(bào)表綜合管理模塊??梢院芎玫貫橛脩舻娜肆Y源管理部門在對(duì)員工的成本管理、知識(shí)管理、績(jī)效管理等綜合管理給予幫助。以每個(gè)月中所發(fā)工資為例,其中包括考勤、人事信息變動(dòng)、獎(jiǎng)懲、遲到和曠工對(duì)本月的薪資計(jì)算都有影響
26、,為了及時(shí)的計(jì)算發(fā)放工資往往要提前一個(gè)星期花費(fèi)大量時(shí)間,加班加點(diǎn)才能及時(shí)完成,而這樣做無(wú)論從工作效率還是準(zhǔn)確度方面,都不允許,而且還浪費(fèi)大量的人力財(cái)力。如果改用HRP管理做到高效、高精度,還可以減少管理時(shí)帶來(lái)的一些繁瑣的工作,節(jié)約管理帶來(lái)的開支。</p><p> 1.2 人事管理系統(tǒng)發(fā)展趨勢(shì)</p><p><b> 1.2.1趨勢(shì)</b></p>
27、<p> 人力資源管理系統(tǒng)主導(dǎo)21世紀(jì),無(wú)論是發(fā)達(dá)國(guó)家還是發(fā)展中國(guó)家,對(duì)人力資源的戰(zhàn)略性意義都有了深刻的認(rèn)識(shí),并開始付諸行動(dòng)。世界公認(rèn),21世紀(jì)將是人力資源的世紀(jì);人力資源問(wèn)題將主導(dǎo)整個(gè)21世紀(jì)甚至更為遙遠(yuǎn),這種狀況的變化起因于競(jìng)爭(zhēng)壓力。目前,世界經(jīng)濟(jì)趨向全球化。世界經(jīng)濟(jì)的全球化過(guò)程和國(guó)家的開放過(guò)程,要求組織的管理部門降低管理成本以減少競(jìng)爭(zhēng)壓力和增強(qiáng)競(jìng)爭(zhēng)能力。對(duì)于不同的組織,人力資源成本在總成本中的比例是不一樣的。<
28、;/p><p><b> 1.2.2革新</b></p><p> 無(wú)論是現(xiàn)在還是將來(lái),工業(yè)的發(fā)展越來(lái)越多地取決于科學(xué)和技術(shù)、知識(shí)與技能。高新科技產(chǎn)業(yè)更是如此。這不僅要求員工尤其是技術(shù)人員掌握新的科學(xué)知識(shí)和技術(shù)能力,而且更重要的在于要求員工深入而快捷地掌握和應(yīng)用這些知識(shí)和技能。這就導(dǎo)致了兩個(gè)問(wèn)題。第一,隨著這種技術(shù)革新的發(fā)展和知識(shí)更新速度的加快,人們有更多的職業(yè)選擇機(jī)
29、會(huì)。第二,伴隨著這種發(fā)展以及職業(yè)選擇機(jī)會(huì)的增多,人力資源管理活動(dòng)和頻繁程度加??;而且這種活動(dòng)對(duì)科學(xué)技術(shù)的要求與它的反應(yīng)程度也更高了,進(jìn)而提高了人力資源成本。</p><p><b> 1.3 系統(tǒng)調(diào)研</b></p><p> 1.3.1 社會(huì)可行性分析</p><p> 隨著計(jì)算機(jī)的發(fā)展與普及,以及互聯(lián)網(wǎng)技術(shù)的擴(kuò)展,日常勞資人事管理必將
30、實(shí)現(xiàn)無(wú)紙化辦公,并且加入到公司內(nèi)部的Intranet或者是Internet上去,實(shí)現(xiàn)數(shù)據(jù)的共享,這樣有利于勞資人事信息在單位內(nèi)部的查詢,提高了數(shù)據(jù)資源的利用,并且能及時(shí)的得到更新,不需要象過(guò)去那樣浪費(fèi)大量的人力物力去進(jìn)行抄寫,提高了工作的效率</p><p> 1.3.2 技術(shù)可行性分析</p><p> Visual Studio.NET提供了一個(gè)統(tǒng)一的、緊密集成的可視化編程環(huán)境,簡(jiǎn)
31、化了開發(fā)應(yīng)用程序的過(guò)程,縮短了實(shí)用方法的時(shí)間。利用Visual Studio.NET,可以非常輕松地創(chuàng)建具有自動(dòng)伸縮能力的可靠的應(yīng)用程序和組件。而且微軟的優(yōu)秀成果c#語(yǔ)言保持了c/c++所特有的強(qiáng)大功能和控制能力。與c++十分相似的模型和語(yǔ)法,具有與COM+服務(wù)完全的交互性和完全支持能力,能夠輕松地遷移現(xiàn)有的代碼。數(shù)據(jù)庫(kù)方面SQL2005已經(jīng)可以滿足中小型企業(yè)的數(shù)據(jù)要求,甚至有些大型企業(yè)都可以達(dá)到要求。如今進(jìn)算計(jì)普及程度日益推廣,計(jì)算機(jī)
32、配置日新月異,能承載此系統(tǒng)的機(jī)器就如辦公的機(jī)器都可以達(dá)到要求。所以說(shuō)本系統(tǒng)具有技術(shù)可行性。</p><p> 1.3.3 經(jīng)濟(jì)可行性分析</p><p> 采用傳統(tǒng)的手工輸入方法,不僅工作繁瑣而且需要人力輸入多,記錄容易出錯(cuò),那樣產(chǎn)生了成本高,效果差的弊病,對(duì)于一個(gè)企業(yè)的資料庫(kù)建立是十分困難和麻煩的。而采用這種系統(tǒng)所發(fā)費(fèi)的成本,精力都遠(yuǎn)遠(yuǎn)低于手工,并且實(shí)用十分方便,更新也簡(jiǎn)易,每個(gè)部門
33、只需一個(gè)人統(tǒng)一管理,對(duì)企業(yè)實(shí)現(xiàn)辦公無(wú)紙化能起到很大的作用。所以此系統(tǒng)經(jīng)濟(jì)可行性也具備了。</p><p> 1.3.4 管理可行性分析</p><p> 本系統(tǒng)采用了系統(tǒng)數(shù)據(jù)備份、恢復(fù)的功能,而且界面層次分明,一目了然,加上設(shè)計(jì)方面加入了人性化元素。管理此系統(tǒng)并不難,易學(xué)易會(huì)。</p><p><b> 1.4 研究?jī)?nèi)容</b></
34、p><p> 本論文共分為5章。第1章緒論,介紹了本課題的應(yīng)用目的和意義、人事管理系統(tǒng)、可行性分析和研究?jī)?nèi)容。第2章介紹了開發(fā)工具及其特點(diǎn)、數(shù)據(jù)庫(kù)技術(shù)。第3章主要介紹了系統(tǒng)的設(shè)計(jì)與分析,包括總體設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、詳細(xì)設(shè)計(jì)等。第4章主要介紹系統(tǒng)實(shí)現(xiàn),即系統(tǒng)各種模塊的功能實(shí)現(xiàn)。第5章為本課題完成成果和發(fā)展期望的總結(jié)。</p><p> 本論文主要利用C#可視化技術(shù)及SQL數(shù)據(jù)庫(kù)開發(fā)技術(shù),對(duì)員工
35、管理與考勤管理系統(tǒng)進(jìn)行系統(tǒng)化、細(xì)致化和完善化的分析研究。</p><p> 2開發(fā)工具及其語(yǔ)言特點(diǎn)</p><p> 2.1 Visual Studio.NET主要特點(diǎn)如下2.1.1提供加速開發(fā)過(guò)程的高效工具</p><p> Visual Studio.NET提供了一個(gè)統(tǒng)一的、緊密集成的可視化編程環(huán)境,以幫助用戶簡(jiǎn)化開發(fā)網(wǎng)絡(luò)應(yīng)用程序的過(guò)程,縮短學(xué)習(xí)使用方法
36、的時(shí)間。它提供了一種新的語(yǔ)言——C#。通過(guò)共享的HTML、XML和樣式單編輯器,用戶可以輕松地借助包括C#在內(nèi)的任何一種Visual Studio語(yǔ)言來(lái)開發(fā)網(wǎng)絡(luò)應(yīng)用程序。2.1.2 提供對(duì)各種網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計(jì)能力</p><p> 借助Web Form,用戶可以用他們?cè)陂_發(fā)基于窗體的桌面應(yīng)用程序時(shí)所使用的技巧來(lái)創(chuàng)建跨平臺(tái)、跨瀏覽器的網(wǎng)絡(luò)應(yīng)用程序。2.1.3 利用XML和Web Service來(lái)簡(jiǎn)化分布
37、式計(jì)算</p><p> Web Service借助標(biāo)準(zhǔn)的Intemet協(xié)議在網(wǎng)絡(luò)上調(diào)用商務(wù)邏輯。HTTP被作為Web Service傳輸?shù)幕A(chǔ)協(xié)議,該協(xié)議使得對(duì)功能的請(qǐng)求能夠穿越各種團(tuán)體所使用的防火墻。XML被用來(lái)對(duì)上述功能請(qǐng)求的參數(shù)進(jìn)行格式統(tǒng)一,從而使這些請(qǐng)求能夠使用于所有的軟件和硬件。這樣使得對(duì)Web Service的訪問(wèn)可以通過(guò)任何一種語(yǔ)言、使用任何一種組件模型在任何一種操作系統(tǒng)上實(shí)現(xiàn)。2.1.4快速
38、構(gòu)建中間層商務(wù)組件</p><p> Visual Studio的一個(gè)核心目標(biāo)就是要為基于服務(wù)器的應(yīng)用程序提供應(yīng)用程序快速部署工具。利用Visual Studio.NET創(chuàng)建的組件將為您的商務(wù)運(yùn)作提供足夠的功能和伸縮性。2.1.5構(gòu)建可靠的可伸縮解決方案</p><p> 利用Visual Studio.NET,用戶可以非常輕松地創(chuàng)建具有自動(dòng)伸縮能力的可靠的應(yīng)用程序和組件。2.2
39、C#技術(shù)概述</p><p> C#在帶來(lái)對(duì)應(yīng)用程序的快速開發(fā)能力的同時(shí),并沒有犧牲C與C++程序員所關(guān)心的各種特性。它忠實(shí)地繼承了C和C++的優(yōu)點(diǎn)。如果你對(duì)C或C++有所了解,你會(huì)發(fā)現(xiàn)它是那樣的熟悉。即使你是一位新手,C#也不會(huì)給你帶來(lái)任何其它的麻煩,快速應(yīng)用程序開發(fā)(Rapid Application Development,RAD)的思想與簡(jiǎn)潔的語(yǔ)法將會(huì)使你迅速成為一名熟練的開發(fā)人員。</p>
40、<p> C#是專門為.NET應(yīng)用而開發(fā)出的語(yǔ)言。這從根本上保證了C#與.NET框架的完美結(jié)合。在.NET運(yùn)行庫(kù)的支持下,.NET框架的各種優(yōu)點(diǎn)在C#中表現(xiàn)得淋漓盡致。C#的一些突出的特點(diǎn)</p><p><b> ●簡(jiǎn)潔的語(yǔ)法</b></p><p> ●精心地面向?qū)ο笤O(shè)計(jì)</p><p> ●與Web的緊密結(jié)合<
41、/p><p> ●完整的安全性與錯(cuò)誤處理</p><p><b> ●版本處理技術(shù)</b></p><p><b> ●靈活性與兼容性</b></p><p> 2.2.1簡(jiǎn)潔的語(yǔ)法</p><p> 在缺省的情況下,C#的代碼在.NET框架提供的“可操縱”環(huán)境下運(yùn)行,
42、不允許直接地內(nèi)存操作。它所帶來(lái)的最大的特色是沒有了指針。與此相關(guān)的是,那些在C++中被瘋狂使用的操作符(例如:“::”、“->”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個(gè)“.”,對(duì)于我們來(lái)說(shuō),現(xiàn)在需要理解的一切僅僅是名字的嵌套而已。</p><p> C#用真正的關(guān)鍵字換掉了那些把活動(dòng)模板庫(kù)(Active Template Library,ALT)和COM搞得亂糟糟的偽關(guān)鍵字,如OLE_COLOR、BOOL
43、、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.NET類庫(kù)中都有了新名字。</p><p> 語(yǔ)法中的冗余是C++中的常見的問(wèn)題,比如"const"和"#define"、各種各樣的字符類型等等。C#對(duì)此進(jìn)行了簡(jiǎn)化,只保留了常見的形式,而別的冗余形式從它的語(yǔ)法結(jié)構(gòu)中被清除了出去。</p><p> 2.2.2精心地面向?qū)?/p>
44、象設(shè)計(jì)</p><p> 從Smalltalk開始,面向?qū)ο蟮脑掝}就始終纏繞著任何一種現(xiàn)代程序設(shè)計(jì)語(yǔ)言。的確,C#具有面向?qū)ο蟮恼Z(yǔ)言所應(yīng)有的一切特性:封裝、繼承與多態(tài)性,這并不出奇。然而,通過(guò)精心地面向?qū)ο笤O(shè)計(jì),從高級(jí)商業(yè)對(duì)象到系統(tǒng)級(jí)應(yīng)用,C#建造廣泛組件的絕對(duì)選擇。在C#的類型系統(tǒng)中,每種類型都可以看作一個(gè)對(duì)象。C#提供了一個(gè)叫做裝箱(boxing)與拆箱(unboxing)的機(jī)制來(lái)完成這種操作,而不給使用者
45、帶來(lái)麻煩,這在以后的章節(jié)中將進(jìn)行更為詳細(xì)的介紹。</p><p> C#只允許單繼承,即一個(gè)類不會(huì)有多個(gè)基類,從而避免了類型定義的混亂。在后面的學(xué)習(xí)中你很快會(huì)發(fā)現(xiàn),C#中沒有了全局函數(shù),沒有了全局變量,也沒有了全局常數(shù)。一切的一切,都必須封裝在一個(gè)類之中。你的代碼將具有更好的可讀性,并且減少了發(fā)生命名沖突的可能。整個(gè)C#的類模型是建立在.NET虛擬對(duì)象系統(tǒng)(Visual Object System,VOS)的基
46、礎(chǔ)之上,其對(duì)象模型是.NET基礎(chǔ)架構(gòu)的一部分,而不再是其本身的組成部分。在下面將會(huì)談到,這樣做的另一個(gè)好處是兼容性。</p><p> 借助于從VB中得來(lái)的豐富的RAD經(jīng)驗(yàn),C#具備了良好的開發(fā)環(huán)境。結(jié)合自身強(qiáng)大的面向?qū)ο蠊δ埽珻#使得開發(fā)人員的生產(chǎn)效率得到極大的提高。對(duì)于公司而言,軟件開發(fā)周期的縮短將能使它們更好應(yīng)付網(wǎng)絡(luò)經(jīng)濟(jì)的競(jìng)爭(zhēng)。在功能與效率的杠桿上人們終于找到了支點(diǎn)。</p><p&g
47、t; 2.2.3與Web的緊密結(jié)合</p><p> .NET中新的應(yīng)用程序開發(fā)模型意味著越來(lái)越多的解決方案需要與Web標(biāo)準(zhǔn)相統(tǒng)一,例如超文本標(biāo)記語(yǔ)言(Hypertext Markup Language,HTML)和XML。由于歷史的原因,現(xiàn)存的一些開發(fā)工具不能與Web緊密地結(jié)合。SOAP的使用使得C#克服了這一缺陷,大規(guī)模深層次的分布式開發(fā)從此成為可能。</p><p> 由于有了
48、Web服務(wù)框架的幫助,對(duì)程序員來(lái)說(shuō),網(wǎng)絡(luò)服務(wù)看起來(lái)就象是C#的本地對(duì)象。程序員們能夠利用他們已有的面向?qū)ο蟮闹R(shí)與技巧開發(fā)Web服務(wù)。僅需要使用簡(jiǎn)單的C#語(yǔ)言結(jié)構(gòu),C#組件將能夠方便地為Web服務(wù),并允許它們通過(guò)Internet被運(yùn)行在任何操作系統(tǒng)上的任何語(yǔ)言所調(diào)用。舉個(gè)例子,XML已經(jīng)成為網(wǎng)絡(luò)中數(shù)據(jù)結(jié)構(gòu)傳遞的標(biāo)準(zhǔn),為了提高效率,C#允許直接將XML數(shù)據(jù)映射成為結(jié)構(gòu)。這樣就可以有效的處理各種數(shù)據(jù)。</p><p>
49、; 2.2.4完整的安全性與錯(cuò)誤處理</p><p> 語(yǔ)言的安全性與錯(cuò)誤處理能力,是衡量一種語(yǔ)言是否優(yōu)秀的重要依據(jù)。任何人都會(huì)犯錯(cuò)誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對(duì)不屬于自己管理范圍的內(nèi)存空間進(jìn)行修改,這些錯(cuò)誤常常產(chǎn)生難以預(yù)見的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡(jiǎn)單錯(cuò)誤的代價(jià)將會(huì)是讓人無(wú)法承受的。C#的先進(jìn)設(shè)計(jì)思想可以消除軟件開發(fā)中的許多常見錯(cuò)誤,并提供了包括類型安全在內(nèi)的完
50、整的安全性能。為了減少開發(fā)中的錯(cuò)誤,C#會(huì)幫助開發(fā)者通過(guò)更少的代碼完成相同的功能,這不但減輕了編程人員的工作量,同時(shí)更有效地避免了錯(cuò)誤的發(fā)生。</p><p> .NET運(yùn)行庫(kù)提供了代碼訪問(wèn)安全特性,它允許管理員和用戶根據(jù)代碼的ID來(lái)配置安全等級(jí)。在缺省情況下,從Internet和Intranet下載的代碼都不允許訪問(wèn)任何本地文件和資源。比方說(shuō),一個(gè)在網(wǎng)絡(luò)上的共享目錄中運(yùn)行的程序,如果它要訪問(wèn)本地的一些資源,那
51、么異常將被觸發(fā),它將會(huì)無(wú)情地被異常扔出去,若拷貝到本地硬盤上運(yùn)行則一切正常。內(nèi)存管理中的垃圾收集機(jī)制減輕了開發(fā)人員對(duì)內(nèi)存管理的負(fù)擔(dān)。.NET平臺(tái)提供的垃圾收集器(Garbage Collection,GC)將負(fù)責(zé)資源的釋放與對(duì)象撤銷時(shí)的內(nèi)存清理工作。</p><p> 變量類型是安全的。C#中不能使用未初始化的變量,對(duì)象的成員變量由編譯器負(fù)責(zé)將其置為零,當(dāng)局部變量未經(jīng)初始化而被使用時(shí),編譯器將做出提醒;C#不支
52、持不安全的指向,不能將整數(shù)指向引用類型,例如對(duì)象,當(dāng)進(jìn)行下行指向時(shí),C#將自動(dòng)驗(yàn)證指向的有效性;C#中提供了邊界檢查與溢出檢查功能。</p><p> 2.2.5版本處理技術(shù)</p><p> C#提供內(nèi)置的版本支持來(lái)減少開發(fā)費(fèi)用,使用C#將會(huì)使開發(fā)人員更加輕易地開發(fā)和維護(hù)各種商業(yè)用戶。升級(jí)軟件系統(tǒng)中的組件(模塊)是一件容易產(chǎn)生錯(cuò)誤的工作。在代碼修改過(guò)程中可能對(duì)現(xiàn)存的軟件產(chǎn)生影響,很有
53、可能導(dǎo)致程序的崩潰。為了幫助開發(fā)人員處理這些問(wèn)題,C#在語(yǔ)言中內(nèi)置了版本控制功能。例如:函數(shù)重載必須被顯式聲明,而不會(huì)象在C++或java中經(jīng)常發(fā)生的那樣不經(jīng)意地被進(jìn)行,這可以防止代碼級(jí)錯(cuò)誤和保留版本化的特性。另一個(gè)相關(guān)的特性是接口和接口繼承的支持。這些特性可以保證復(fù)雜的軟件可以被方便地開發(fā)和升級(jí)。</p><p> 2.2.6靈活性和兼容性</p><p> 在簡(jiǎn)化語(yǔ)法的同時(shí),C#并
54、沒有失去靈活性。盡管它不是一種無(wú)限制語(yǔ)言,比如:它不能用來(lái)開發(fā)硬件驅(qū)動(dòng)程序,在默認(rèn)的狀態(tài)下沒有指針等等,但是,在學(xué)習(xí)過(guò)程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。</p><p> 如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來(lái),你將能夠使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組,并且調(diào)用這些非安全代碼不會(huì)帶來(lái)任何其它的問(wèn)題。此外,它還提供了一個(gè)另外的東西(這樣的稱呼多少有些不敬)來(lái)模擬指針的功能--delegate
55、s,代表。再舉一個(gè)例子:C#不支持類的多繼承,但是通過(guò)對(duì)接口的繼承,你將獲得這一功能。</p><p><b> 2.2.7安全性</b></p><p> 正是由于其靈活性,C#允許與C風(fēng)格的需要傳遞指針型參數(shù)的API進(jìn)行交互操作,DLL的任何入口點(diǎn)都可以在程序中進(jìn)行訪問(wèn)。C#遵守.NET公用語(yǔ)言規(guī)范(Common Language Specification,
56、CLS),從而保證了C#組件與其它語(yǔ)言組件間的互操作性。元數(shù)據(jù)(Metadata)概念的引入既保證了兼容性,又實(shí)現(xiàn)了類型安全。</p><p> 3.1SQL2005主要特點(diǎn)</p><p> 3.1.1.NET框架</p><p> 使用SQL Server2005,開發(fā)人員通過(guò)使用相似的語(yǔ)言,例如微軟的VisualC#.NET和微軟的VisualBasic
57、,將能夠創(chuàng)立數(shù)據(jù)庫(kù)對(duì)象。開發(fā)人員還將能夠建立兩個(gè)新的對(duì)象——用戶定義的類和集合。 </p><p> 3.1.2XML技術(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 Server2005將會(huì)自身支持存儲(chǔ)和查詢可擴(kuò)展標(biāo)記語(yǔ)言文件。 </p><p> 3.1.3ADO.
58、NET2.0版本 </p><p> 從對(duì)SQL類的新的支持,到多活動(dòng)結(jié)果集(MARS),SQL Server2005中的ADO.NET將推動(dòng)數(shù)據(jù)集的存取和操縱,實(shí)現(xiàn)更大的可升級(jí)性和靈活性。 </p><p> 3.1.4增強(qiáng)的安全性 </p><p> SQL Server2005中的新安全模式將用戶和對(duì)象分開,提供fine-grainaccess存取、并允
59、許對(duì)數(shù)據(jù)存取進(jìn)行更大的控制。另外,所有系統(tǒng)表格將作為視圖得到實(shí)施,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)象進(jìn)行了更大程度的控制。 </p><p> 3.1.5Transact-SQL的增強(qiáng)性能 </p><p> SQL Server2005為開發(fā)可升級(jí)的數(shù)據(jù)庫(kù)應(yīng)用軟件,提供了新的語(yǔ)言功能。這些增強(qiáng)的性能包括處理錯(cuò)誤、遞歸查詢功能、關(guān)系運(yùn)算符PIVOT,APPLY,ROW_NUMBER和其他數(shù)據(jù)列排行功能,
60、等等。 </p><p> 3.1.6SQL服務(wù)中介 </p><p> SQL服務(wù)中介將為大型、營(yíng)業(yè)范圍內(nèi)的應(yīng)用軟件,提供一個(gè)分布式的、異步應(yīng)用框架。 </p><p> 3.1.7通告服務(wù) </p><p> 通告服務(wù)使得業(yè)務(wù)可以建立豐富的通知應(yīng)用軟件,向任何設(shè)備,提供個(gè)人化的和及時(shí)的信息,例如股市警報(bào)、新聞?dòng)嗛啞f送警報(bào)、航
61、空公司票價(jià)等。在SQL Server2005中,通告服務(wù)和其他技術(shù)更加緊密地融合在了一起,這些技術(shù)包括分析服務(wù)、SQLServerManagementStudio。 </p><p> 3.1.8Web服務(wù) </p><p> 使用SQL Server2005,開發(fā)人員將能夠在數(shù)據(jù)庫(kù)層開發(fā)Web服務(wù),將SQL Server當(dāng)作一個(gè)超文本傳輸協(xié)議(HTTP)偵聽器,并且為網(wǎng)絡(luò)服務(wù)中心應(yīng)用
62、軟件提供一個(gè)新型的數(shù)據(jù)存取功能。 </p><p> 3.1.9報(bào)表服務(wù) </p><p> 利用SQL Server2005,報(bào)表服務(wù)可以提供報(bào)表控制,可以通過(guò)VisualStudio2005發(fā)行。 </p><p> 3.1.10全文搜索功能的增強(qiáng) </p><p> SQL Server2005將支持豐富的全文應(yīng)用軟件。服務(wù)器的
63、編目功能將得到增強(qiáng),對(duì)編目的對(duì)象提供更大的靈活性。查詢性能和可升級(jí)性將大幅得到改進(jìn),同時(shí)新的管理工具將為有關(guān)全文功能的運(yùn)行,提供更深入的了解。</p><p> 3.2C#與ADO.NET</p><p> 3.2.1 C#中的數(shù)據(jù)庫(kù)訪問(wèn)</p><p> 用.NET框架編寫的(當(dāng)然也包括用C#編寫的應(yīng)用程序)應(yīng)用程序需要訪問(wèn)數(shù)據(jù)庫(kù)時(shí),將使用ADO
64、.NET來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)。數(shù)據(jù)綁定是一種非常有用的訪問(wèn)數(shù)據(jù)庫(kù)的方法,能夠減少需要編寫的代碼量。很多簡(jiǎn)單任務(wù)可以通過(guò)純粹聲明式代碼來(lái)完成。</p><p> <1> ADO.NET</p><p> ADO.NET是微軟的數(shù)據(jù)訪問(wèn)框架的最新產(chǎn)物,它是.NET框架的一部分。在ADO.NET之前,程序員在ASP(Active Server Pages)或Visual Basic中
65、使用ADO(AtiveX Data Objects),這是一組COM(Component Object Model,組件對(duì)象模型)組件,它通過(guò)一個(gè)易于使用的封裝類提供對(duì)底層數(shù)據(jù)訪問(wèn)代碼的訪問(wèn)。雖然ADO大大簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問(wèn),但更高級(jí)的程序員(特別是C++程序員)通常更喜歡使用更直接、更快的代碼,如OLE DB(Object Linking and Embedding for Databases)代碼庫(kù)。</p><p
66、> ADO.NET比ADO的功能更強(qiáng)大。它是在.NET代碼中訪問(wèn)數(shù)據(jù)庫(kù)的最好工具。</p><p> .NET框架中的ADO.NET類型(在System.Data命名空間及其子空間下的所有類型)包括那些為訪問(wèn)SQL Server、OLE DB、ODBC和Oracle數(shù)據(jù)庫(kù)而優(yōu)化的類型。它們都是基于通用類的,因此使用ADO.NET訪問(wèn)不同的DBMS是相似的。</p><p> A
67、DO.NET類型實(shí)現(xiàn)兩個(gè)主要的功能。</p><p> ● 數(shù)據(jù)訪問(wèn):用于訪問(wèn)數(shù)據(jù)庫(kù)中數(shù)據(jù)和操作數(shù)據(jù)庫(kù)的類型;</p><p> ● 數(shù)據(jù)表示:用于包含數(shù)據(jù)庫(kù)數(shù)據(jù)(如數(shù)據(jù)表)的類型。</p><p> 這兩種類型之間聯(lián)系密切,在數(shù)據(jù)庫(kù)開發(fā)中兩種類型都會(huì)用到。嚴(yán)格地說(shuō),可以只用一種數(shù)據(jù)庫(kù)訪問(wèn)
68、類型。然而,如果使用數(shù)據(jù)訪問(wèn)類型來(lái)填充數(shù)據(jù)表示類型將節(jié)省大量工作。 </p><p> ADO.NET包含7個(gè)重要的基類,其中4個(gè)是數(shù)據(jù)訪問(wèn)類:</p><p> ● DbConnection;</p><p> ● DbCommand;</p><p> ● DbDataReader;</p><p&g
69、t; ● DbDataAdapter。</p><p> 其他3個(gè)類是數(shù)據(jù)表示類:</p><p> ● DataTable;</p><p> ● DataRelation;</p><p> ● DataSet。</p><p> DataTable類使用了其他一些重要的類:DataColum
70、、Constraint和DataRow,本節(jié)也將介紹它們。</p><p> 1.DbConnection</p><p> DbConnection類提供與數(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ù)訪
71、問(wèn)類都依靠DbConnection與數(shù)據(jù)庫(kù)進(jìn)行通信。DbConnection類的扮演角色如圖2.1所示。</p><p> 圖3.2.1 DbConnection類</p><p> 在從DbConnection派生而來(lái)的類中,到數(shù)據(jù)庫(kù)的連接都是由連接字符串定義的,該字符串存儲(chǔ)在屬性DbConnection.ConnectionString中。</p><
72、;p> 數(shù)據(jù)庫(kù)連接應(yīng)只在傳輸數(shù)據(jù)時(shí)才打開,因此創(chuàng)建DbConnection實(shí)例時(shí)并不自動(dòng)連接到數(shù)據(jù)庫(kù)。DbConnection類定義了Open()方法和Close()方法,用于控制連接何時(shí)可用。很多其他的ADO.NET類也能控制連接狀態(tài),例如,有些類在完成操作后關(guān)閉它們使用的連接。</p><p> DbConnection對(duì)象還能參與事務(wù)??捎肈bConnection.BeginTransaction
73、()方法開始事務(wù),或使用DbConnection.EnlistTransaction()作為已有事務(wù)的一部分執(zhí)行操作。</p><p> 訪問(wèn)SQL Server或SQL Server速成版中的數(shù)據(jù)時(shí),使用SqlConnection,該類是DbConnection的子類。一般來(lái)說(shuō),DbConnection和SqlConnection及其他子類都稱為連接類。</p><p> 2.DbC
74、ommand</p><p> DbCommand類提供與數(shù)據(jù)庫(kù)交互的主要方法??梢杂肈bCommand對(duì)象來(lái)執(zhí)行SQL語(yǔ)句、運(yùn)行存儲(chǔ)過(guò)程等。DbCommand及其派生類稱為命令類。</p><p> 大部分時(shí)候并不直接使用DbCommand,而是用封裝了DbCommand的其他對(duì)象。但有時(shí)候需要對(duì)數(shù)據(jù)庫(kù)通信進(jìn)行更多的控制,這時(shí)就可以使用DbCommand對(duì)象。</p>
75、<p> DbCommand對(duì)象的扮演角色如圖2.2所示。</p><p> 圖3.2.2 DbCommand類</p><p> DbCommand中最重要的屬性是DbCommand.CommandText。要執(zhí)行SQL語(yǔ)句,就要將語(yǔ)句文本放在這個(gè)屬性中??梢杂肈bCommand.CommandType來(lái)指定要執(zhí)行的語(yǔ)句類型,使用DbCommand.Conne
76、ction和DbCommand.Tranction來(lái)訪問(wèn)底層的連接或事務(wù)。</p><p> 要注意,DbCommand對(duì)象可能有參數(shù)化的命令字符串,命令中的參數(shù)來(lái)自類型為DbCommand. Parameters集合的屬性。這與直接在命令字符串中輸入?yún)?shù)相比有很多優(yōu)點(diǎn),在本書后面部分將會(huì)看到。</p><p> 要使用DbCommand對(duì)象執(zhí)行命令,有三種選擇,這取決于要執(zhí)行的命令是
77、什么。有些命令不返回結(jié)果,這種情況下可以用DbCommand.ExecuteNonQuery()方法;有些命令返回一個(gè)結(jié)果,這時(shí)可用DbCommand.ExecuteScalar()方法;最后,有很多命令返回多行數(shù)據(jù),這時(shí)可用DbCommand. ExecuteReader()方法,它將返回一個(gè)DbDataReader對(duì)象(下一小節(jié)將解釋)。</p><p> SQL Server的DbCommand版本名為S
78、qlCommand。它有自己的一些特殊方法,如SqlCommand. ExecuteXmlReader()方法,它直接以XML格式返回結(jié)果。</p><p> 3.DbDataReader</p><p> 使用DbDataReader類可以從結(jié)果集中讀取數(shù)據(jù),如從執(zhí)行存儲(chǔ)在命令對(duì)象中的命令生成的結(jié)果集中讀取數(shù)據(jù)。該類經(jīng)過(guò)高度優(yōu)化,可以很快地訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。然而,這種優(yōu)化也有些副作
79、用,例如,只能以串行方式一次讀取一行數(shù)據(jù)。不能讀完兩行后再返回去讀取第一行。通常,可以用DbDataReader對(duì)象(更確切地說(shuō),是數(shù)據(jù)閱讀器的子類對(duì)象)來(lái)提取要使用的行數(shù)據(jù),并將其存儲(chǔ)在其他對(duì)象中。例如,可以讀取一個(gè)結(jié)果集中的每行,將其存儲(chǔ)到在自定義集合或泛型列表對(duì)象中的自定義類中。</p><p> 與命令對(duì)象一樣,很多時(shí)候數(shù)據(jù)閱讀器對(duì)象是由ADO.NET命名空間下的其他類使用的,用戶不必直接使用它們。&l
80、t;/p><p> 圖3.2.3說(shuō)明了如何在數(shù)據(jù)庫(kù)應(yīng)用程序中使用數(shù)據(jù)閱讀器。</p><p> 要使用數(shù)據(jù)閱讀器對(duì)象,首先必須調(diào)用DbDataReader.Read()方法選擇結(jié)果集中的第一行??刹粩嗾{(diào)用該方法來(lái)移動(dòng)數(shù)據(jù)閱讀器,使數(shù)據(jù)閱讀器像結(jié)果集中的游標(biāo)一樣總是指向一行。獲取一行時(shí),Read()方法返回true;否則返回false—如當(dāng)所有行都已經(jīng)讀完時(shí)。也可以用DbDataReader
81、. HasRows屬性來(lái)判斷結(jié)果集中是否還有其他行。</p><p> 圖3.2.4 DbDataReader類</p><p> 很多屬性和方法可用于檢查當(dāng)前選中的行。DbDataReader.FieldCount查看當(dāng)前行包含多少列,并用DbDataReader的重載索引器訪問(wèn)各列。如果知道要訪問(wèn)的列名,可用基于字符串的索引器來(lái)獲得列值,也可以使用基于整數(shù)的索引器通過(guò)位
82、置獲得列。在這兩種情況下,這種方法都將返回object值,可將其轉(zhuǎn)化為其他類型的數(shù)據(jù)。</p><p> 也可以使用DbDataReader提供的多個(gè)方法直接獲得類型化數(shù)據(jù),如GetString()和GetInt32()分別將指定列以string和int值返回,列通過(guò)其索引選擇。要使用這些方法獲得值類型,必須首先使用DbDataReader.IsDBNull檢查空值;否則,空值將引發(fā)異常。檢查空值是必須的,因?yàn)?/p>
83、不管什么數(shù)據(jù)庫(kù)類型都可以為空。這與.NET中的值類型不同,可為空的值類型(如int)在這種上下文環(huán)境中是不受支持的。</p><p> DbDataReader也能夠獲得關(guān)于它包含的數(shù)據(jù)的元信息—使用DbDataReader.GetSchema Table()方法,這樣就可以知道列的名稱、數(shù)據(jù)類型和其他信息,如列是否包含空值。</p><p> 與前面的其他類一樣,也有專門用于SQL
84、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
85、r</p><p> 在ADO.NET的核心數(shù)據(jù)訪問(wèn)類中,最后一個(gè)是DbDataAdapter類。它比前面介紹過(guò)的類型要復(fù)雜得多,設(shè)計(jì)該類的目的只有一個(gè):減少存儲(chǔ)在數(shù)據(jù)集對(duì)象中的數(shù)據(jù)與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換時(shí)的干擾。與前面的類一樣,DbDataAdapter類也有很多派生類,它們統(tǒng)稱為數(shù)據(jù)適配器類。</p><p> 稍后將詳細(xì)解釋什么是數(shù)據(jù)集對(duì)象,簡(jiǎn)單地說(shuō),它們是能夠以.NET對(duì)象的形來(lái)
86、表示數(shù)據(jù)庫(kù)中數(shù)據(jù)的對(duì)象。數(shù)據(jù)集對(duì)象可以包含整個(gè)表或多個(gè)表的數(shù)據(jù)。數(shù)據(jù)適配器既可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳輸給包含在數(shù)據(jù)集中的表,也可以將數(shù)據(jù)集中的數(shù)據(jù)傳輸?shù)綌?shù)據(jù)庫(kù)中。</p><p> 這個(gè)功能由命令對(duì)象和數(shù)據(jù)閱讀器對(duì)象執(zhí)行,因此大部分時(shí)候用戶不必考慮它。然而,DbDataAdapter最重要的(也是最有用的)特性之一是,它用于傳輸數(shù)據(jù)的命令對(duì)象被暴露出來(lái),因此可以根據(jù)需要對(duì)它們進(jìn)行定制。</p>&l
87、t;p> 圖2.4說(shuō)明了DbDataAdapter類的工作原理,包括它包含的命令對(duì)象。</p><p> 圖3.2.4 DbDataAdapter類</p><p> 數(shù)據(jù)適配器使用的4個(gè)命令對(duì)象存儲(chǔ)在4個(gè)屬性中:SelectCommand(用于查詢數(shù)據(jù))、InsertCommand(用于添加數(shù)據(jù))、UpdateCommand(用于編輯數(shù)據(jù))和DeleteComma
88、nd(用于刪除數(shù)據(jù))。要使用適配器,并不一定全部用到這4個(gè)屬性,例如,可以只用適配器來(lái)查詢數(shù)據(jù)。另外,.NET框架可以根據(jù)其他命令的值推斷出命令的值,例如,可以根據(jù)查詢命令來(lái)生成更新、插入和刪除命令。然而,這種自動(dòng)生成的命令的效率可能不如手工提供的高。本書稍后還會(huì)討論這個(gè)問(wèn)題。</p><p> 數(shù)據(jù)適配器中最常用的兩個(gè)方法是DbDataAdapter.Fill()和DbDataAdapter.Update()
89、。Fill()方法從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù);Update()方法更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。這兩個(gè)方法都可以用于數(shù)據(jù)集或單個(gè)數(shù)據(jù)表。另外,可以使用DbDataAdapter.FillSchema()獲取架構(gòu)數(shù)據(jù)。</p><p> SQL Server中的DbDataAdapter版本是Sql DbDataAdapter。</p><p> 5.DataTable</p><p&
90、gt; DataTable是ADO.NET提供的第一個(gè)數(shù)據(jù)表示類。與數(shù)據(jù)訪問(wèn)類不同,數(shù)據(jù)表示類沒有專門用于特定數(shù)據(jù)庫(kù)管理系統(tǒng)(如SQL Server)的子類,它們獨(dú)立于平臺(tái)。實(shí)際上,如果需要的話,數(shù)據(jù)表示類完全可以獨(dú)立于數(shù)據(jù)庫(kù)使用,它們只是存儲(chǔ)數(shù)據(jù)的一種方便的方法。</p><p> DataTable類用于存儲(chǔ)(讀者可能對(duì)此感到不解)數(shù)據(jù)表。在繼續(xù)討論這個(gè)類之前需要澄清一件事情:以DataTable對(duì)象存儲(chǔ)
91、的表不一定要映射到數(shù)據(jù)庫(kù)中的表。DataTable可能包含表中數(shù)據(jù)的一個(gè)子集,該子集可能只包含數(shù)據(jù)庫(kù)表的部分行、部分列,可能是由數(shù)據(jù)庫(kù)中多個(gè)表組合而成的數(shù)據(jù),還可能是所有這些的組合,這取決于用于獲得數(shù)據(jù)的查詢語(yǔ)句。通常,DataTable與數(shù)據(jù)庫(kù)中的表匹配,但仍然要知道上面提到的事實(shí)。</p><p> 圖3.2.5說(shuō)明了DataTable與其他ADO.NET對(duì)象之間的關(guān)系。</p><p&
92、gt; 圖2.5 DataTable</p><p> 要獲得完全填充的DataTable,可使用數(shù)據(jù)適配器。有包含數(shù)據(jù)的DataTable后,就可以訪問(wèn)行、列、約束和它包含的其他信息。這些信息可以通過(guò)命名恰切的屬性來(lái)訪問(wèn),包括Rows、Columns和Contraints等。</p><p> 上面提到的3個(gè)屬性都返回一個(gè)集合類(DataRowCollection、Da
93、taColumnCollection和ConstaintCollection)對(duì)象。與其他集合類一樣,這些類可用于在它們包含的對(duì)象集合中導(dǎo)航,添加或刪除項(xiàng)等。稍后將介紹這些集合包含的類。</p><p> DataTable類另一個(gè)非常重要的方面是,如何處理數(shù)據(jù)修改。例如,如果刪除DataTable中的一行,數(shù)據(jù)適配器如何知道在數(shù)據(jù)庫(kù)中刪除對(duì)應(yīng)的數(shù)據(jù)?DataTable對(duì)象記錄了對(duì)原始數(shù)據(jù)的修改,而不只是數(shù)據(jù)的
94、當(dāng)前狀態(tài)。從DataTable中刪除一行并不會(huì)真的刪除這些數(shù)據(jù),而只是數(shù)據(jù)被標(biāo)記為已刪除。在DataTable對(duì)象的消費(fèi)方(如應(yīng)用程序)看來(lái),就像數(shù)據(jù)已被刪除,但實(shí)際上并沒有刪除。</p><p> 任何時(shí)候都可以使用GetChanges()方法獲得關(guān)于對(duì)DataTable對(duì)象所做的修改列表(以另一個(gè)DataTable對(duì)象的形式)。可以在適當(dāng)時(shí)使用AcceptChanges()方法接受已做的修改,從而覆蓋原來(lái)的
95、數(shù)據(jù)。例如,可以在修改提交到數(shù)據(jù)庫(kù)后這樣做。也可以使用RejectChanges()撤銷所有的修改,如當(dāng)最終用戶單擊“取消”按鈕時(shí)。</p><p> DataTable對(duì)象也暴露了很多事件,在應(yīng)用程序中可以定制這些事件,如RowDeleted和ColumnChanged。使用這些事件可以保證應(yīng)用程序?qū)κ录M(jìn)行響應(yīng),還可以實(shí)現(xiàn)其他功能,例如,確保底層數(shù)據(jù)庫(kù)在數(shù)據(jù)發(fā)生修改時(shí)立即更新。</p><
96、;p> (1)DataColumn。</p><p> DataColumn存儲(chǔ)了在數(shù)據(jù)表中定義列所需的所有信息。在DataTable中,Columns屬性包含一個(gè)DataColumnCollection,這是一個(gè)DataColumn對(duì)象集合。</p><p> DataColumn還包含與DBMD匹配的屬性,包括ColumnName、Dataype、AllowDBNull和D
97、efaultValue。它的屬性可能比使用的DBMS的屬性還要多,但如果使用過(guò)不同的DBMS,這一點(diǎn)將顯而易見。對(duì)于SQL Server,這并不是問(wèn)題。</p><p> (2)Constaint。</p><p> Constaint對(duì)象(在ConstaintCollection中,可通過(guò)DataTable.Constaints訪問(wèn))用于包含表的所有元數(shù)據(jù),這些數(shù)據(jù)不包含在DataC
98、olumn對(duì)象中。Constaint類作為更具體類的基類,這些具體類包括UniqueConstaint—用于確保給定列或列組合的值是唯一的(例如,這對(duì)于主鍵是必須的)和ForeingKeyConstaint—用于實(shí)現(xiàn)表之間的關(guān)系。</p><p> ?。?)DataRow。</p><p> DataRow類用于存儲(chǔ)表中一行包含的數(shù)據(jù)。通過(guò)DataTable.Rows屬性可以訪問(wèn)Data
99、Row Collection對(duì)象,后者存儲(chǔ)了組成表數(shù)據(jù)的多個(gè)DataRow對(duì)象。一行數(shù)據(jù)中的各列可通過(guò)索引器來(lái)訪問(wèn),索引器讓你能夠通過(guò)列名、索引和版本(例如,如果行被修改)來(lái)訪問(wèn)列。</p><p> 行的當(dāng)前狀態(tài),即它是否被修改、刪除或以某種方式改變,可通過(guò)DataRowState屬性訪問(wèn)。該屬性的值為DataRowState類型,這是一種包含所有可能行狀態(tài)的枚舉類型。各個(gè)DataRow對(duì)象也有與DataTa
100、ble對(duì)應(yīng)的方法,用于接受、拒絕和獲得更改。例如,可以推斷出,調(diào)用DataTable. AcceptChanges()將級(jí)聯(lián)地對(duì)表的每行調(diào)用DataRow AcceptChanges()。</p><p> 6.DataRelation</p><p> 在處理多個(gè)DataTable對(duì)象時(shí),通常需要表示(并實(shí)施)表數(shù)據(jù)之間的關(guān)系。這由DataRelation類來(lái)完成??蓪⒍鄠€(gè)DataR
101、elation對(duì)象組合起來(lái),構(gòu)成一個(gè)DataRelationCollection對(duì)象。</p><p> 關(guān)系可以用DataRelation類的多個(gè)屬性來(lái)定義,包括ChildTable、ChildColumns、ChildKeyConstraint、ParentTable和ParentKeyConstraint等。這些屬性都是對(duì)相應(yīng)的對(duì)象的引用,如DataTable和DataColumn對(duì)象。關(guān)系名也被存儲(chǔ)在D
102、ataRelation.RelationName屬性中。</p><p> 現(xiàn)在還不用太擔(dān)心DataRelation對(duì)象,因?yàn)樗鼈兎庋b了ADO.NET比較高級(jí)的方面,這在本書后面將介紹。</p><p><b> 7.DataSet</b></p><p> 現(xiàn)在到了ADO.NET中最重要的類—DataSet。從某種程度上說(shuō),該類只是Da
103、taTable對(duì)象和DataRelation對(duì)象的集合(如圖2.6所示)。然而,DataSet的強(qiáng)大功能體現(xiàn)在與其他對(duì)象結(jié)合使用,包括用于Web應(yīng)用程序和Windows應(yīng)用程序的控件、Web服務(wù)和XML文檔。</p><p> DataSet類包含很多屬性和方法;其中很多與其組成部分的屬性和方法類似,例如,GetChanges()和RejectChanges()。還有一些重要的屬性,如Tables(以DataT
104、ableCollection類的形式包含DataSet中的表集合)、Relations(包含一個(gè)DataRelation Collection類,其中的Relation對(duì)象定義了表之間的關(guān)系)。</p><p> 數(shù)據(jù)表之間的關(guān)系及應(yīng)用于數(shù)據(jù)的約束使得對(duì)DataSet的操作很麻煩。例如,如果兩個(gè)表之間存在一對(duì)多關(guān)系,則添加一行到其中一個(gè)表中,可能要求另一個(gè)表中存在一行。而這行可能不存在(例如,如果兩行同時(shí)添加時(shí)
105、),這時(shí),為避免錯(cuò)誤,添加這些行的順序?qū)⒑苤匾?;必須先添加位于關(guān)系“一”端的行。也可以將DataSet.Enforce Constraints屬性設(shè)置為false,這樣在執(zhí)行編輯操作時(shí)將忽略關(guān)系。</p><p> ?。?)DataSet對(duì)象和XML之間的關(guān)系。</p><p> 與ADO.NET的其他對(duì)象一樣,設(shè)計(jì)DataSet對(duì)象時(shí)也考慮了XML數(shù)據(jù)。使用DataSet. GetXm
106、l()方法,可將數(shù)據(jù)集轉(zhuǎn)換為XML文檔;還可以使用DataSet.GetXmlSchema()方法只提取數(shù)據(jù)集中的架構(gòu)(包括數(shù)據(jù)集包含的所有表和其他對(duì)象的架構(gòu))作為XML文檔。還可使用序列化技術(shù)在DataSet和XML文檔之間進(jìn)行轉(zhuǎn)換,因?yàn)镈ataSet類實(shí)現(xiàn)了IxmlSeria- lizable接口。</p><p> DataSet對(duì)象與XML之間的關(guān)系以及使用序列化在這兩種表示格式之間進(jìn)行轉(zhuǎn)換,在.NET
107、框架中運(yùn)用相當(dāng)廣泛。它提供了一種在應(yīng)用程序?qū)又g和通過(guò)Internet交換數(shù)據(jù)的很好方法。特別地,有了數(shù)據(jù)集的XML表示形式后,就可以在Web服務(wù)之間進(jìn)行交換DataSet對(duì)象。</p><p> ?。?)類型化數(shù)據(jù)集(typed data set)。</p><p> DataSet對(duì)象的功能很強(qiáng)大,但它們并不是最容易使用或最合乎邏輯的。例如,要訪問(wèn)表中的特定行,使用它就顯得很笨拙。必
108、須使用DataSet.Tables集合獲得正確的表,用DataTable.Rows集合獲得正確的行,然后以對(duì)象引用的形式或通過(guò)DataColumn的方法提取列數(shù)據(jù)—這些都不容易。訪問(wèn)特定列的代碼行可能如下所示:</p><p> int result = (int)myDataSet.Tables["myTable"].Rows[5][ "IntegerColumn"];
109、</p><p> 還有一種方法,那就是使用類型化數(shù)據(jù)集。類型化數(shù)據(jù)集是DataSet的子類,但它包含強(qiáng)類型屬性和方法,使得數(shù)據(jù)操作更容易。如果使用類型化數(shù)據(jù)集,上面的代碼就可以簡(jiǎn)化為如下所示:</p><p> int result = myTypedDataSet.MyTable[5].IntegerColumn;</p><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è)人事管理系統(tǒng)畢業(yè)論文設(shè)計(jì)
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文設(shè)計(jì)
- 畢業(yè)論文設(shè)計(jì) 企業(yè)人事管理系統(tǒng)設(shè)計(jì)
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文設(shè)計(jì)-企業(yè)人事管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文企業(yè)人事管理系統(tǒng)
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文-vb企業(yè)人事管理系統(tǒng)設(shè)計(jì)
- 畢業(yè)論文--人事管理系統(tǒng)設(shè)計(jì)
- 人事管理系統(tǒng)畢業(yè)論文設(shè)計(jì)
- vb企業(yè)人事管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文--企業(yè)人事管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 企業(yè)人事管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 企業(yè)人事管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文——人事管理系統(tǒng)
- 人事管理系統(tǒng)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論