企業(yè)人事管理系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

PAGEPAGEIII畢業(yè)設(shè)計(論文)企業(yè)人事管理系統(tǒng)的設(shè)計與實現(xiàn)摘要在當(dāng)今社會,互聯(lián)網(wǎng)空前的發(fā)展,給人們的工作和生活帶來了極大的便利和高效,信息化,電子化已經(jīng)成為節(jié)約運營成本,提高工作效率的首選??紤]到當(dāng)前大量企業(yè)的人事管理尚處于手工作業(yè)階段,不但效率低下,還常常因為管理的不慎而出現(xiàn)紕漏。因此根據(jù)部分企業(yè)提供的需求,設(shè)計此企業(yè)人事管理系統(tǒng),以幫助企業(yè)達到人事管理辦公自動化、節(jié)約管理成本、提高企業(yè)工作效率的目的。本企業(yè)人事管理系統(tǒng)采用C/S結(jié)構(gòu),主要對企業(yè)員工的信息以及跟人事相關(guān)的工作流程進行集中的管理,方便企業(yè)建立一個完善的、強大的員工信息數(shù)據(jù)庫。它是以.NET2005.和SQL2005Express數(shù)據(jù)庫作為開發(fā)平臺。使用C#設(shè)計操作控件和編寫操作程序,完成數(shù)據(jù)輸入、修改、存儲、調(diào)用查詢等功能;并使用SQL2005數(shù)據(jù)庫形成數(shù)據(jù)表,進行數(shù)據(jù)存儲。本文詳細(xì)介紹了企業(yè)人事管理系統(tǒng)的功能需求,系統(tǒng)設(shè)計和具體實現(xiàn)。并簡要介紹了系統(tǒng)開發(fā)采用的過程方法。

關(guān)鍵詞

企業(yè)人事管理系統(tǒng);C/S;員工信息數(shù)據(jù)庫TheDesignandImplementationofEnterprisePersonnelManagementSystemBasedonC/SAbstractInoursociety,theunprecedenteddevelopmentofInternethasbroughtusgreatconvenienceandefficiency.Informatizationandelectronizationhavebecomethefirstchoiceofsavingoperationcostandimprovingworkefficiency.Manyenterprises'personneladministrationsystemslieinthephaseofmanualmanagementwhich阿惹inefficientandeasytogowrongbycarelessness.Therefore,thisMIS(ManagementInformationSystem)isdesigned

tomakethepersonneladministrationmorescientific,normativeandefficient.Thesystemadoptsthestructuremodeofclient/server(C/S),WindowsXPastheoperationsystem,SQL2005Expressasthebackgrounddatabase,andMicrosoftVisualStudio.NET2005asthedevelopingtool.Itcanhelpenterprisestoestablishaperfect,strongstaffinformationdatabase,whichfacilitatesthecentralizedmanagementofstaffinformationandworkflow.Thepaperexplainsthecoursedesign,systemdesignandimplementationofMIS,alsobrieflyintroducestheprocessofthesystemdevelopment.Keywords:PersonnelManagementSystem;C/S;EmployeeInformationDatabase第68頁企業(yè)人事管理系統(tǒng) 21前言 21.1應(yīng)用的目的與意義 21.2人事管理系統(tǒng)發(fā)展趨勢 31.2.2世界趨勢 31.2.3技術(shù)革新 31.2.4工作目標(biāo)和價值觀的改變 41.3系統(tǒng)調(diào)研 41.3.1社會可行性分析 41.3.2技術(shù)可行性分析 41.3.3經(jīng)濟可行性分析 51.3.4管理可行性分析 51.4研究內(nèi)容 52開發(fā)工具及其語言特點 52.1VisualStudio.NET主要特點如下 52.2.1簡潔的語法 72.2.2精心地面向?qū)ο笤O(shè)計 72.2.3與Web的緊密結(jié)合 82.2.4完整的安全性與錯誤處理 92.2.5版本處理技術(shù) 92.2.6靈活性和兼容性 103.1SQL2005主要特點 103.1.1.NET框架 103.1.2XML技術(shù) 113.1.3ADO.NET2.0版本 113.1.4增強的安全性 113.1.5Transact-SQL的增強性能 113.1.6SQL服務(wù)中介 113.1.7通告服務(wù) 113.1.8Web服務(wù) 123.1.9報表服務(wù) 123.1.10全文搜索功能的增強 123.2C#與ADO.NET 123.2.1

C#中的數(shù)據(jù)庫訪問 123.2.2數(shù)據(jù)綁定 233.3SQL語言 243.3.1表定義語句 243.3.2視圖定義語句 243.3.3索引定義語句 243.3.4數(shù)據(jù)操縱語句 243.3.5INSERT語句 253.3.6UPDATE語句 253.3.7DELETE語句 253.3.8查詢語句 253.3.9條件查詢 253.3.10查詢排序 263.3.11統(tǒng)計查詢 263.3.12Groupby子句 263.3.13Distinct關(guān)鍵詞 263.3.14Top關(guān)鍵詞 263.3.15多表查詢 273.3.16多重查詢 273.3.17EXISTS關(guān)鍵詞 274系統(tǒng)需求分析 274.1系統(tǒng)流程圖如下 275致謝 49附錄F各模塊實現(xiàn)的主要源代碼 50F1.1登錄模塊的設(shè)計與實現(xiàn)的主要代碼 50} 51F1.2登陸實體類: 51F1.3員工管理模塊的設(shè)計與實現(xiàn)的主要代碼 52F1.3.1員工管理實現(xiàn)的主要代碼: 52F1.3.2部門管理實現(xiàn)主要代碼: 53} 55F1.3.3工資管理主要代碼: 55} 59F1.3.4考勤信息設(shè)計與實現(xiàn)主要代碼: 59} 62F1.4數(shù)據(jù)訪問類: 62} 65F1.5生日提醒主要代碼: 65F1.6啟動第三方EXE文件操作類: 65} 66企業(yè)人事管理系統(tǒng)1前言1.1應(yīng)用的目的與意義人的管理是一切管理工作的核心。員工代表一個企業(yè)的形象,因而人事管理機制設(shè)計的好壞,直接影響一個企業(yè)的成敗。

員工的檔案管理是企業(yè)人事管理的基礎(chǔ),在企業(yè)員工普遍流失的今天,一個準(zhǔn)確而及時的人事管理系統(tǒng),有利于人事部門對員工流動進行分析、編制,為企業(yè)所需人員提供了保障。人力資源部那些重復(fù)的,事務(wù)性的工作交給HRP(HumanResourcePlanning,人力資源管理系統(tǒng))來解決,可以省去用戶以往人力資源管理工作的繁瑣、枯燥;用領(lǐng)先的人力資源管理理念,把人力資源管理的作業(yè)流程控制和戰(zhàn)略規(guī)劃設(shè)計巧妙地集合于一體;系統(tǒng)重點涉及到人力資源管理工作中的薪資、考勤、績效、調(diào)動、基本信息、用戶管理以及用戶切換等方面,并有綜合的系統(tǒng)安全設(shè)置、報表綜合管理模塊??梢院芎玫貫橛脩舻娜肆Y源管理部門在對員工的成本管理、知識管理、績效管理等綜合管理給予幫助。以每個月中所發(fā)工資為例,其中包括考勤、人事信息變動、獎懲、遲到和曠工對本月的薪資計算都有影響,為了及時的計算發(fā)放工資往往要提前一個星期花費大量時間,加班加點才能及時完成,而這樣做無論從工作效率還是準(zhǔn)確度方面,都不允許,而且還浪費大量的人力財力。如果改用HRP管理做到高效、高精度,還可以減少管理時帶來的一些繁瑣的工作,節(jié)約管理帶來的開支。1.2人事管理系統(tǒng)發(fā)展趨勢1.2.2世界趨勢人力資源管理系統(tǒng)主導(dǎo)21世紀(jì),無論是發(fā)達國家還是發(fā)展中國家,對人力資源的戰(zhàn)略性意義都有了深刻的認(rèn)識,并開始付諸行動。世界公認(rèn),21世紀(jì)將是人力資源的世紀(jì);人力資源問題將主導(dǎo)整個21世紀(jì)甚至更為遙遠(yuǎn),這種狀況的變化起因于競爭壓力。目前,世界經(jīng)濟趨向全球化。世界經(jīng)濟的全球化過程和國家的開放過程,要求組織的管理部門降低管理成本以減少競爭壓力和增強競爭能力。對于不同的組織,人力資源成本在總成本中的比例是不一樣的。1.2.3技術(shù)革新無論是現(xiàn)在還是將來,工業(yè)的發(fā)展越來越多地取決于科學(xué)和技術(shù)、知識與技能。高新科技產(chǎn)業(yè)更是如此。這不僅要求員工尤其是技術(shù)人員掌握新的科學(xué)知識和技術(shù)能力,而且更重要的在于要求員工深入而快捷地掌握和應(yīng)用這些知識和技能。這就導(dǎo)致了兩個問題。第一,隨著這種技術(shù)革新的發(fā)展和知識更新速度的加快,人們有更多的職業(yè)選擇機會。第二,伴隨著這種發(fā)展以及職業(yè)選擇機會的增多,人力資源管理活動和頻繁程度加劇;而且這種活動對科學(xué)技術(shù)的要求與它的反應(yīng)程度也更高了,進而提高了人力資源成本。1.2.4工作目標(biāo)和價值觀的改變隨著社會政治和經(jīng)濟的發(fā)展,人們的工作目標(biāo)和價值觀也都發(fā)生了重要的變化。這就對人事管理部門和管理人員提出了新的要求和新的問題,不得不考慮諸如工作類型設(shè)計、崗位分析、充分尊重員工以及為他們提供良好的個人發(fā)展和自我價值實現(xiàn)的環(huán)境與條件等問題。這樣,人力資源管理就派上了用場。1.3系統(tǒng)調(diào)研1.3.1社會可行性分析隨著計算機的發(fā)展與普及,以及互聯(lián)網(wǎng)技術(shù)的擴展,日常勞資人事管理必將實現(xiàn)無紙化辦公,并且加入到公司內(nèi)部的Intranet或者是Internet上去,實現(xiàn)數(shù)據(jù)的共享,這樣有利于勞資人事信息在單位內(nèi)部的查詢,提高了數(shù)據(jù)資源的利用,并且能及時的得到更新,不需要象過去那樣浪費大量的人力物力去進行抄寫,提高了工作的效率1.3.2技術(shù)可行性分析VisualStudio.NET提供了一個統(tǒng)一的、緊密集成的可視化編程環(huán)境,簡化了開發(fā)應(yīng)用程序的過程,縮短了實用方法的時間。利用VisualStudio.NET,可以非常輕松地創(chuàng)建具有自動伸縮能力的可靠的應(yīng)用程序和組件。而且微軟的優(yōu)秀成果c#語言保持了c/c++所特有的強大功能和控制能力。與c++十分相似的模型和語法,具有與COM+服務(wù)完全的交互性和完全支持能力,能夠輕松地遷移現(xiàn)有的代碼。數(shù)據(jù)庫方面SQL2005已經(jīng)可以滿足中小型企業(yè)的數(shù)據(jù)要求,甚至有些大型企業(yè)都可以達到要求。如今進算計普及程度日益推廣,計算機配置日新月異,能承載此系統(tǒng)的機器就如辦公的機器都可以達到要求。所以說本系統(tǒng)具有技術(shù)可行性。1.3.3經(jīng)濟可行性分析 采用傳統(tǒng)的手工輸入方法,不僅工作繁瑣而且需要人力輸入多,記錄容易出錯,那樣產(chǎn)生了成本高,效果差的弊病,對于一個企業(yè)的資料庫建立是十分困難和麻煩的。而采用這種系統(tǒng)所發(fā)費的成本,精力都遠(yuǎn)遠(yuǎn)低于手工,并且實用十分方便,更新也簡易,每個部門只需一個人統(tǒng)一管理,對企業(yè)實現(xiàn)辦公無紙化能起到很大的作用。所以此系統(tǒng)經(jīng)濟可行性也具備了。1.3.4管理可行性分析本系統(tǒng)采用了系統(tǒng)數(shù)據(jù)備份、恢復(fù)的功能,而且界面層次分明,一目了然,加上設(shè)計方面加入了人性化元素。管理此系統(tǒng)并不難,易學(xué)易會。1.4研究內(nèi)容本論文共分為5章。第1章緒論,介紹了本課題的應(yīng)用目的和意義、人事管理系統(tǒng)、可行性分析和研究內(nèi)容。第2章介紹了開發(fā)工具及其特點、數(shù)據(jù)庫技術(shù)。第3章主要介紹了系統(tǒng)的設(shè)計與分析,包括總體設(shè)計、數(shù)據(jù)庫設(shè)計、詳細(xì)設(shè)計等。第4章主要介紹系統(tǒng)實現(xiàn),即系統(tǒng)各種模塊的功能實現(xiàn)。第5章為本課題完成成果和發(fā)展期望的總結(jié)。本論文主要利用C#可視化技術(shù)及SQL數(shù)據(jù)庫開發(fā)技術(shù),對員工管理與考勤管理系統(tǒng)進行系統(tǒng)化、細(xì)致化和完善化的分析研究。2開發(fā)工具及其語言特點2.1VisualStudio.NET主要特點如下

2.1.1提供加速開發(fā)過程的高效工具VisualStudio.NET提供了一個統(tǒng)一的、緊密集成的可視化編程環(huán)境,以幫助用戶簡化開發(fā)網(wǎng)絡(luò)應(yīng)用程序的過程,縮短學(xué)習(xí)使用方法的時間。它提供了一種新的語言——C#。通過共享的HTML、XML和樣式單編輯器,用戶可以輕松地借助包括C#在內(nèi)的任何一種VisualStudio語言來開發(fā)網(wǎng)絡(luò)應(yīng)用程序。

2.1.2提供對各種網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計能力借助WebForm,用戶可以用他們在開發(fā)基于窗體的桌面應(yīng)用程序時所使用的技巧來創(chuàng)建跨平臺、跨瀏覽器的網(wǎng)絡(luò)應(yīng)用程序。

2.1.3利用XML和WebService來簡化分布式計算WebService借助標(biāo)準(zhǔn)的Intemet協(xié)議在網(wǎng)絡(luò)上調(diào)用商務(wù)邏輯。HTTP被作為WebService傳輸?shù)幕A(chǔ)協(xié)議,該協(xié)議使得對功能的請求能夠穿越各種團體所使用的防火墻。XML被用來對上述功能請求的參數(shù)進行格式統(tǒng)一,從而使這些請求能夠使用于所有的軟件和硬件。這樣使得對WebService的訪問可以通過任何一種語言、使用任何一種組件模型在任何一種操作系統(tǒng)上實現(xiàn)。

2.1.4快速構(gòu)建中間層商務(wù)組件VisualStudio的一個核心目標(biāo)就是要為基于服務(wù)器的應(yīng)用程序提供應(yīng)用程序快速部署工具。利用VisualStudio.NET創(chuàng)建的組件將為您的商務(wù)運作提供足夠的功能和伸縮性。

2.1.5構(gòu)建可靠的可伸縮解決方案利用VisualStudio.NET,用戶可以非常輕松地創(chuàng)建具有自動伸縮能力的可靠的應(yīng)用程序和組件。

2.2C#技術(shù)概述C#在帶來對應(yīng)用程序的快速開發(fā)能力的同時,并沒有犧牲C與C++程序員所關(guān)心的各種特性。它忠實地繼承了C和C++的優(yōu)點。如果你對C或C++有所了解,你會發(fā)現(xiàn)它是那樣的熟悉。即使你是一位新手,C#也不會給你帶來任何其它的麻煩,快速應(yīng)用程序開發(fā)(RapidApplicationDevelopment,RAD)的思想與簡潔的語法將會使你迅速成為一名熟練的開發(fā)人員。C#是專門為.NET應(yīng)用而開發(fā)出的語言。這從根本上保證了C#與.NET框架的完美結(jié)合。在.NET運行庫的支持下,.NET框架的各種優(yōu)點在C#中表現(xiàn)得淋漓盡致。C#的一些突出的特點●簡潔的語法●精心地面向?qū)ο笤O(shè)計●與Web的緊密結(jié)合●完整的安全性與錯誤處理●版本處理技術(shù)●靈活性與兼容性2.2.1簡潔的語法在缺省的情況下,C#的代碼在.NET框架提供的“可操縱”環(huán)境下運行,不允許直接地內(nèi)存操作。它所帶來的最大的特色是沒有了指針。與此相關(guān)的是,那些在C++中被瘋狂使用的操作符(例如:“::”、“->”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個“.”,對于我們來說,現(xiàn)在需要理解的一切僅僅是名字的嵌套而已。C#用真正的關(guān)鍵字換掉了那些把活動模板庫(ActiveTemplateLibrary,ALT)和COM搞得亂糟糟的偽關(guān)鍵字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.NET類庫中都有了新名字。語法中的冗余是C++中的常見的問題,比如"const"和"#define"、各種各樣的字符類型等等。C#對此進行了簡化,只保留了常見的形式,而別的冗余形式從它的語法結(jié)構(gòu)中被清除了出去。2.2.2精心地面向?qū)ο笤O(shè)計從Smalltalk開始,面向?qū)ο蟮脑掝}就始終纏繞著任何一種現(xiàn)代程序設(shè)計語言。的確,C#具有面向?qū)ο蟮恼Z言所應(yīng)有的一切特性:封裝、繼承與多態(tài)性,這并不出奇。然而,通過精心地面向?qū)ο笤O(shè)計,從高級商業(yè)對象到系統(tǒng)級應(yīng)用,C#建造廣泛組件的絕對選擇。在C#的類型系統(tǒng)中,每種類型都可以看作一個對象。C#提供了一個叫做裝箱(boxing)與拆箱(unboxing)的機制來完成這種操作,而不給使用者帶來麻煩,這在以后的章節(jié)中將進行更為詳細(xì)的介紹。C#只允許單繼承,即一個類不會有多個基類,從而避免了類型定義的混亂。在后面的學(xué)習(xí)中你很快會發(fā)現(xiàn),C#中沒有了全局函數(shù),沒有了全局變量,也沒有了全局常數(shù)。一切的一切,都必須封裝在一個類之中。你的代碼將具有更好的可讀性,并且減少了發(fā)生命名沖突的可能。整個C#的類模型是建立在.NET虛擬對象系統(tǒng)(VisualObjectSystem,VOS)的基礎(chǔ)之上,其對象模型是.NET基礎(chǔ)架構(gòu)的一部分,而不再是其本身的組成部分。在下面將會談到,這樣做的另一個好處是兼容性。借助于從VB中得來的豐富的RAD經(jīng)驗,C#具備了良好的開發(fā)環(huán)境。結(jié)合自身強大的面向?qū)ο蠊δ?,C#使得開發(fā)人員的生產(chǎn)效率得到極大的提高。對于公司而言,軟件開發(fā)周期的縮短將能使它們更好應(yīng)付網(wǎng)絡(luò)經(jīng)濟的競爭。在功能與效率的杠桿上人們終于找到了支點。2.2.3與Web的緊密結(jié)合.NET中新的應(yīng)用程序開發(fā)模型意味著越來越多的解決方案需要與Web標(biāo)準(zhǔn)相統(tǒng)一,例如超文本標(biāo)記語言(HypertextMarkupLanguage,HTML)和XML。由于歷史的原因,現(xiàn)存的一些開發(fā)工具不能與Web緊密地結(jié)合。SOAP的使用使得C#克服了這一缺陷,大規(guī)模深層次的分布式開發(fā)從此成為可能。由于有了Web服務(wù)框架的幫助,對程序員來說,網(wǎng)絡(luò)服務(wù)看起來就象是C#的本地對象。程序員們能夠利用他們已有的面向?qū)ο蟮闹R與技巧開發(fā)Web服務(wù)。僅需要使用簡單的C#語言結(jié)構(gòu),C#組件將能夠方便地為Web服務(wù),并允許它們通過Internet被運行在任何操作系統(tǒng)上的任何語言所調(diào)用。舉個例子,XML已經(jīng)成為網(wǎng)絡(luò)中數(shù)據(jù)結(jié)構(gòu)傳遞的標(biāo)準(zhǔn),為了提高效率,C#允許直接將XML數(shù)據(jù)映射成為結(jié)構(gòu)。這樣就可以有效的處理各種數(shù)據(jù)。2.2.4完整的安全性與錯誤處理語言的安全性與錯誤處理能力,是衡量一種語言是否優(yōu)秀的重要依據(jù)。任何人都會犯錯誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對不屬于自己管理范圍的內(nèi)存空間進行修改,這些錯誤常常產(chǎn)生難以預(yù)見的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡單錯誤的代價將會是讓人無法承受的。C#的先進設(shè)計思想可以消除軟件開發(fā)中的許多常見錯誤,并提供了包括類型安全在內(nèi)的完整的安全性能。為了減少開發(fā)中的錯誤,C#會幫助開發(fā)者通過更少的代碼完成相同的功能,這不但減輕了編程人員的工作量,同時更有效地避免了錯誤的發(fā)生。.NET運行庫提供了代碼訪問安全特性,它允許管理員和用戶根據(jù)代碼的ID來配置安全等級。在缺省情況下,從Internet和Intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,一個在網(wǎng)絡(luò)上的共享目錄中運行的程序,如果它要訪問本地的一些資源,那么異常將被觸發(fā),它將會無情地被異常扔出去,若拷貝到本地硬盤上運行則一切正常。內(nèi)存管理中的垃圾收集機制減輕了開發(fā)人員對內(nèi)存管理的負(fù)擔(dān)。.NET平臺提供的垃圾收集器(GarbageCollection,GC)將負(fù)責(zé)資源的釋放與對象撤銷時的內(nèi)存清理工作。變量類型是安全的。C#中不能使用未初始化的變量,對象的成員變量由編譯器負(fù)責(zé)將其置為零,當(dāng)局部變量未經(jīng)初始化而被使用時,編譯器將做出提醒;C#不支持不安全的指向,不能將整數(shù)指向引用類型,例如對象,當(dāng)進行下行指向時,C#將自動驗證指向的有效性;C#中提供了邊界檢查與溢出檢查功能。2.2.5版本處理技術(shù)C#提供內(nèi)置的版本支持來減少開發(fā)費用,使用C#將會使開發(fā)人員更加輕易地開發(fā)和維護各種商業(yè)用戶。升級軟件系統(tǒng)中的組件(模塊)是一件容易產(chǎn)生錯誤的工作。在代碼修改過程中可能對現(xiàn)存的軟件產(chǎn)生影響,很有可能導(dǎo)致程序的崩潰。為了幫助開發(fā)人員處理這些問題,C#在語言中內(nèi)置了版本控制功能。例如:函數(shù)重載必須被顯式聲明,而不會象在C++或java中經(jīng)常發(fā)生的那樣不經(jīng)意地被進行,這可以防止代碼級錯誤和保留版本化的特性。另一個相關(guān)的特性是接口和接口繼承的支持。這些特性可以保證復(fù)雜的軟件可以被方便地開發(fā)和升級。2.2.6靈活性和兼容性在簡化語法的同時,C#并沒有失去靈活性。盡管它不是一種無限制語言,比如:它不能用來開發(fā)硬件驅(qū)動程序,在默認(rèn)的狀態(tài)下沒有指針等等,但是,在學(xué)習(xí)過程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來,你將能夠使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組,并且調(diào)用這些非安全代碼不會帶來任何其它的問題。此外,它還提供了一個另外的東西(這樣的稱呼多少有些不敬)來模擬指針的功能--delegates,代表。再舉一個例子:C#不支持類的多繼承,但是通過對接口的繼承,你將獲得這一功能。2.2.7安全性正是由于其靈活性,C#允許與C風(fēng)格的需要傳遞指針型參數(shù)的API進行交互操作,DLL的任何入口點都可以在程序中進行訪問。C#遵守.NET公用語言規(guī)范(CommonLanguageSpecification,CLS),從而保證了C#組件與其它語言組件間的互操作性。元數(shù)據(jù)(Metadata)概念的引入既保證了兼容性,又實現(xiàn)了類型安全。3.1SQL2005主要特點3.1.1.NET框架使用SQLServer2005,開發(fā)人員通過使用相似的語言,例如微軟的VisualC#.NET和微軟的VisualBasic,將能夠創(chuàng)立數(shù)據(jù)庫對象。開發(fā)人員還將能夠建立兩個新的對象——用戶定義的類和集合。3.1.2XML技術(shù)在使用本地網(wǎng)絡(luò)和互聯(lián)網(wǎng)的情況下,在不同應(yīng)用軟件之間散步數(shù)據(jù)的時候,可擴展標(biāo)記語言(XML)是一個重要的標(biāo)準(zhǔn)。SQLServer2005將會自身支持存儲和查詢可擴展標(biāo)記語言文件。3.1.3ADO.NET2.0版本從對SQL類的新的支持,到多活動結(jié)果集(MARS),SQLServer2005中的ADO.NET將推動數(shù)據(jù)集的存取和操縱,實現(xiàn)更大的可升級性和靈活性。3.1.4增強的安全性SQLServer2005中的新安全模式將用戶和對象分開,提供fine-grainaccess存取、并允許對數(shù)據(jù)存取進行更大的控制。另外,所有系統(tǒng)表格將作為視圖得到實施,對數(shù)據(jù)庫系統(tǒng)對象進行了更大程度的控制。3.1.5Transact-SQL的增強性能SQLServer2005為開發(fā)可升級的數(shù)據(jù)庫應(yīng)用軟件,提供了新的語言功能。這些增強的性能包括處理錯誤、遞歸查詢功能、關(guān)系運算符PIVOT,APPLY,ROW_NUMBER和其他數(shù)據(jù)列排行功能,等等。3.1.6SQL服務(wù)中介SQL服務(wù)中介將為大型、營業(yè)范圍內(nèi)的應(yīng)用軟件,提供一個分布式的、異步應(yīng)用框架。3.1.7通告服務(wù)通告服務(wù)使得業(yè)務(wù)可以建立豐富的通知應(yīng)用軟件,向任何設(shè)備,提供個人化的和及時的信息,例如股市警報、新聞訂閱、包裹遞送警報、航空公司票價等。在SQLServer2005中,通告服務(wù)和其他技術(shù)更加緊密地融合在了一起,這些技術(shù)包括分析服務(wù)、SQLServerManagementStudio。3.1.8Web服務(wù)使用SQLServer2005,開發(fā)人員將能夠在數(shù)據(jù)庫層開發(fā)Web服務(wù),將SQLServer當(dāng)作一個超文本傳輸協(xié)議(HTTP)偵聽器,并且為網(wǎng)絡(luò)服務(wù)中心應(yīng)用軟件提供一個新型的數(shù)據(jù)存取功能。3.1.9報表服務(wù)利用SQLServer2005,報表服務(wù)可以提供報表控制,可以通過VisualStudio2005發(fā)行。3.1.10全文搜索功能的增強SQLServer2005將支持豐富的全文應(yīng)用軟件。服務(wù)器的編目功能將得到增強,對編目的對象提供更大的靈活性。查詢性能和可升級性將大幅得到改進,同時新的管理工具將為有關(guān)全文功能的運行,提供更深入的了解。3.2C#與ADO.NET3.2.1

C#中的數(shù)據(jù)庫訪問用.NET框架編寫的(當(dāng)然也包括用C#編寫的應(yīng)用程序)應(yīng)用程序需要訪問數(shù)據(jù)庫時,將使用ADO.NET來實現(xiàn)數(shù)據(jù)庫訪問。數(shù)據(jù)綁定是一種非常有用的訪問數(shù)據(jù)庫的方法,能夠減少需要編寫的代碼量。很多簡單任務(wù)可以通過純粹聲明式代碼來完成。<1>ADO.NETADO.NET是微軟的數(shù)據(jù)訪問框架的最新產(chǎn)物,它是.NET框架的一部分。在ADO.NET之前,程序員在ASP(ActiveServerPages)或VisualBasic中使用ADO(AtiveXDataObjects),這是一組COM(ComponentObjectModel,組件對象模型)組件,它通過一個易于使用的封裝類提供對底層數(shù)據(jù)訪問代碼的訪問。雖然ADO大大簡化了數(shù)據(jù)庫訪問,但更高級的程序員(特別是C++程序員)通常更喜歡使用更直接、更快的代碼,如OLEDB(ObjectLinkingandEmbeddingforDatabases)代碼庫。ADO.NET比ADO的功能更強大。它是在.NET代碼中訪問數(shù)據(jù)庫的最好工具。.NET框架中的ADO.NET類型(在System.Data命名空間及其子空間下的所有類型)包括那些為訪問SQLServer、OLEDB、ODBC和Oracle數(shù)據(jù)庫而優(yōu)化的類型。它們都是基于通用類的,因此使用ADO.NET訪問不同的DBMS是相似的。ADO.NET類型實現(xiàn)兩個主要的功能。

數(shù)據(jù)訪問:用于訪問數(shù)據(jù)庫中數(shù)據(jù)和操作數(shù)據(jù)庫的類型;

數(shù)據(jù)表示:用于包含數(shù)據(jù)庫數(shù)據(jù)(如數(shù)據(jù)表)的類型。這兩種類型之間聯(lián)系密切,在數(shù)據(jù)庫開發(fā)中兩種類型都會用到。嚴(yán)格地說,可以只用一種數(shù)據(jù)庫訪問類型。然而,如果使用數(shù)據(jù)訪問類型來填充數(shù)據(jù)表示類型將節(jié)省大量工作。ADO.NET包含7個重要的基類,其中4個是數(shù)據(jù)訪問類:

DbConnection;

●DbCommand;

●DbDataReader;

●DbDataAdapter。其他3個類是數(shù)據(jù)表示類:

DataTable;

●DataRelation;

●DataSet。DataTable類使用了其他一些重要的類:DataColum、Constraint和DataRow,本節(jié)也將介紹它們。1.DbConnectionDbConnection類提供與數(shù)據(jù)庫的連接。創(chuàng)建DbConnection對象時,應(yīng)提供與DBMS通信所需的所有信息,如數(shù)據(jù)庫的位置、用于認(rèn)證的用戶名和密碼以及要訪問的DBMS中的數(shù)據(jù)庫。所有其他ADO.NET數(shù)據(jù)訪問類都依靠DbConnection與數(shù)據(jù)庫進行通信。DbConnection類的扮演角色如圖2.1所示。圖3.2.1

DbConnection類在從DbConnection派生而來的類中,到數(shù)據(jù)庫的連接都是由連接字符串定義的,該字符串存儲在屬性DbConnection.ConnectionString中。數(shù)據(jù)庫連接應(yīng)只在傳輸數(shù)據(jù)時才打開,因此創(chuàng)建DbConnection實例時并不自動連接到數(shù)據(jù)庫。DbConnection類定義了Open()方法和Close()方法,用于控制連接何時可用。很多其他的ADO.NET類也能控制連接狀態(tài),例如,有些類在完成操作后關(guān)閉它們使用的連接。DbConnection對象還能參與事務(wù)??捎肈bConnection.BeginTransaction()方法開始事務(wù),或使用DbConnection.EnlistTransaction()作為已有事務(wù)的一部分執(zhí)行操作。訪問SQLServer或SQLServer速成版中的數(shù)據(jù)時,使用SqlConnection,該類是DbConnection的子類。一般來說,DbConnection和SqlConnection及其他子類都稱為連接類。2.DbCommandDbCommand類提供與數(shù)據(jù)庫交互的主要方法??梢杂肈bCommand對象來執(zhí)行SQL語句、運行存儲過程等。DbCommand及其派生類稱為命令類。大部分時候并不直接使用DbCommand,而是用封裝了DbCommand的其他對象。但有時候需要對數(shù)據(jù)庫通信進行更多的控制,這時就可以使用DbCommand對象。DbCommand對象的扮演角色如圖2.2所示。圖3.2.2

DbCommand類DbCommand中最重要的屬性是DbCommand.CommandText。要執(zhí)行SQL語句,就要將語句文本放在這個屬性中??梢杂肈bCommand.CommandType來指定要執(zhí)行的語句類型,使用DbCommand.Connection和DbCommand.Tranction來訪問底層的連接或事務(wù)。要注意,DbCommand對象可能有參數(shù)化的命令字符串,命令中的參數(shù)來自類型為DbCommand.Parameters集合的屬性。這與直接在命令字符串中輸入?yún)?shù)相比有很多優(yōu)點,在本書后面部分將會看到。要使用DbCommand對象執(zhí)行命令,有三種選擇,這取決于要執(zhí)行的命令是什么。有些命令不返回結(jié)果,這種情況下可以用DbCommand.ExecuteNonQuery()方法;有些命令返回一個結(jié)果,這時可用DbCommand.ExecuteScalar()方法;最后,有很多命令返回多行數(shù)據(jù),這時可用DbCommand.ExecuteReader()方法,它將返回一個DbDataReader對象(下一小節(jié)將解釋)。SQLServer的DbCommand版本名為SqlCommand。它有自己的一些特殊方法,如SqlCommand.ExecuteXmlReader()方法,它直接以XML格式返回結(jié)果。3.DbDataReader使用DbDataReader類可以從結(jié)果集中讀取數(shù)據(jù),如從執(zhí)行存儲在命令對象中的命令生成的結(jié)果集中讀取數(shù)據(jù)。該類經(jīng)過高度優(yōu)化,可以很快地訪問數(shù)據(jù)庫中的數(shù)據(jù)。然而,這種優(yōu)化也有些副作用,例如,只能以串行方式一次讀取一行數(shù)據(jù)。不能讀完兩行后再返回去讀取第一行。通常,可以用DbDataReader對象(更確切地說,是數(shù)據(jù)閱讀器的子類對象)來提取要使用的行數(shù)據(jù),并將其存儲在其他對象中。例如,可以讀取一個結(jié)果集中的每行,將其存儲到在自定義集合或泛型列表對象中的自定義類中。與命令對象一樣,很多時候數(shù)據(jù)閱讀器對象是由ADO.NET命名空間下的其他類使用的,用戶不必直接使用它們。圖3.2.3說明了如何在數(shù)據(jù)庫應(yīng)用程序中使用數(shù)據(jù)閱讀器。要使用數(shù)據(jù)閱讀器對象,首先必須調(diào)用DbDataReader.Read()方法選擇結(jié)果集中的第一行??刹粩嗾{(diào)用該方法來移動數(shù)據(jù)閱讀器,使數(shù)據(jù)閱讀器像結(jié)果集中的游標(biāo)一樣總是指向一行。獲取一行時,Read()方法返回true;否則返回false—如當(dāng)所有行都已經(jīng)讀完時。也可以用DbDataReader.HasRows屬性來判斷結(jié)果集中是否還有其他行。圖3.2.4

DbDataReader類很多屬性和方法可用于檢查當(dāng)前選中的行。DbDataReader.FieldCount查看當(dāng)前行包含多少列,并用DbDataReader的重載索引器訪問各列。如果知道要訪問的列名,可用基于字符串的索引器來獲得列值,也可以使用基于整數(shù)的索引器通過位置獲得列。在這兩種情況下,這種方法都將返回object值,可將其轉(zhuǎn)化為其他類型的數(shù)據(jù)。也可以使用DbDataReader提供的多個方法直接獲得類型化數(shù)據(jù),如GetString()和GetInt32()分別將指定列以string和int值返回,列通過其索引選擇。要使用這些方法獲得值類型,必須首先使用DbDataReader.IsDBNull檢查空值;否則,空值將引發(fā)異常。檢查空值是必須的,因為不管什么數(shù)據(jù)庫類型都可以為空。這與.NET中的值類型不同,可為空的值類型(如int)在這種上下文環(huán)境中是不受支持的。DbDataReader也能夠獲得關(guān)于它包含的數(shù)據(jù)的元信息—使用DbDataReader.GetSchemaTable()方法,這樣就可以知道列的名稱、數(shù)據(jù)類型和其他信息,如列是否包含空值。與前面的其他類一樣,也有專門用于SQLServer的數(shù)據(jù)閱讀器類,這就是SqlDataReader,本書將使用該類。該類繼承DbDataReader,提供將數(shù)據(jù)讀取為本地SQL類型的方法,這樣就能夠避免空類型的問題。這些類型包含在System.Data.Sqltypes命名空間中,是可為空的;如SqlDouble和SqlInt32。雖然這些類型也可以像標(biāo)準(zhǔn)的值類型那樣進行操作,但它們實際上是引用類型。4.DbDataAdapter在ADO.NET的核心數(shù)據(jù)訪問類中,最后一個是DbDataAdapter類。它比前面介紹過的類型要復(fù)雜得多,設(shè)計該類的目的只有一個:減少存儲在數(shù)據(jù)集對象中的數(shù)據(jù)與數(shù)據(jù)庫進行數(shù)據(jù)交換時的干擾。與前面的類一樣,DbDataAdapter類也有很多派生類,它們統(tǒng)稱為數(shù)據(jù)適配器類。稍后將詳細(xì)解釋什么是數(shù)據(jù)集對象,簡單地說,它們是能夠以.NET對象的形來表示數(shù)據(jù)庫中數(shù)據(jù)的對象。數(shù)據(jù)集對象可以包含整個表或多個表的數(shù)據(jù)。數(shù)據(jù)適配器既可以將數(shù)據(jù)庫中的數(shù)據(jù)傳輸給包含在數(shù)據(jù)集中的表,也可以將數(shù)據(jù)集中的數(shù)據(jù)傳輸?shù)綌?shù)據(jù)庫中。這個功能由命令對象和數(shù)據(jù)閱讀器對象執(zhí)行,因此大部分時候用戶不必考慮它。然而,DbDataAdapter最重要的(也是最有用的)特性之一是,它用于傳輸數(shù)據(jù)的命令對象被暴露出來,因此可以根據(jù)需要對它們進行定制。圖2.4說明了DbDataAdapter類的工作原理,包括它包含的命令對象。圖3.2.4

DbDataAdapter類數(shù)據(jù)適配器使用的4個命令對象存儲在4個屬性中:SelectCommand(用于查詢數(shù)據(jù))、InsertCommand(用于添加數(shù)據(jù))、UpdateCommand(用于編輯數(shù)據(jù))和DeleteCommand(用于刪除數(shù)據(jù))。要使用適配器,并不一定全部用到這4個屬性,例如,可以只用適配器來查詢數(shù)據(jù)。另外,.NET框架可以根據(jù)其他命令的值推斷出命令的值,例如,可以根據(jù)查詢命令來生成更新、插入和刪除命令。然而,這種自動生成的命令的效率可能不如手工提供的高。本書稍后還會討論這個問題。數(shù)據(jù)適配器中最常用的兩個方法是DbDataAdapter.Fill()和DbDataAdapter.Update()。Fill()方法從數(shù)據(jù)庫中獲取數(shù)據(jù);Update()方法更新數(shù)據(jù)庫中的數(shù)據(jù)。這兩個方法都可以用于數(shù)據(jù)集或單個數(shù)據(jù)表。另外,可以使用DbDataAdapter.FillSchema()獲取架構(gòu)數(shù)據(jù)。SQLServer中的DbDataAdapter版本是SqlDbDataAdapter。5.DataTableDataTable是ADO.NET提供的第一個數(shù)據(jù)表示類。與數(shù)據(jù)訪問類不同,數(shù)據(jù)表示類沒有專門用于特定數(shù)據(jù)庫管理系統(tǒng)(如SQLServer)的子類,它們獨立于平臺。實際上,如果需要的話,數(shù)據(jù)表示類完全可以獨立于數(shù)據(jù)庫使用,它們只是存儲數(shù)據(jù)的一種方便的方法。DataTable類用于存儲(讀者可能對此感到不解)數(shù)據(jù)表。在繼續(xù)討論這個類之前需要澄清一件事情:以DataTable對象存儲的表不一定要映射到數(shù)據(jù)庫中的表。DataTable可能包含表中數(shù)據(jù)的一個子集,該子集可能只包含數(shù)據(jù)庫表的部分行、部分列,可能是由數(shù)據(jù)庫中多個表組合而成的數(shù)據(jù),還可能是所有這些的組合,這取決于用于獲得數(shù)據(jù)的查詢語句。通常,DataTable與數(shù)據(jù)庫中的表匹配,但仍然要知道上面提到的事實。圖3.2.5說明了DataTable與其他ADO.NET對象之間的關(guān)系。圖2.5

DataTable要獲得完全填充的DataTable,可使用數(shù)據(jù)適配器。有包含數(shù)據(jù)的DataTable后,就可以訪問行、列、約束和它包含的其他信息。這些信息可以通過命名恰切的屬性來訪問,包括Rows、Columns和Contraints等。上面提到的3個屬性都返回一個集合類(DataRowCollection、DataColumnCollection和ConstaintCollection)對象。與其他集合類一樣,這些類可用于在它們包含的對象集合中導(dǎo)航,添加或刪除項等。稍后將介紹這些集合包含的類。DataTable類另一個非常重要的方面是,如何處理數(shù)據(jù)修改。例如,如果刪除DataTable中的一行,數(shù)據(jù)適配器如何知道在數(shù)據(jù)庫中刪除對應(yīng)的數(shù)據(jù)?DataTable對象記錄了對原始數(shù)據(jù)的修改,而不只是數(shù)據(jù)的當(dāng)前狀態(tài)。從DataTable中刪除一行并不會真的刪除這些數(shù)據(jù),而只是數(shù)據(jù)被標(biāo)記為已刪除。在DataTable對象的消費方(如應(yīng)用程序)看來,就像數(shù)據(jù)已被刪除,但實際上并沒有刪除。任何時候都可以使用GetChanges()方法獲得關(guān)于對DataTable對象所做的修改列表(以另一個DataTable對象的形式)??梢栽谶m當(dāng)時使用AcceptChanges()方法接受已做的修改,從而覆蓋原來的數(shù)據(jù)。例如,可以在修改提交到數(shù)據(jù)庫后這樣做。也可以使用RejectChanges()撤銷所有的修改,如當(dāng)最終用戶單擊“取消”按鈕時。DataTable對象也暴露了很多事件,在應(yīng)用程序中可以定制這些事件,如RowDeleted和ColumnChanged。使用這些事件可以保證應(yīng)用程序?qū)κ录M行響應(yīng),還可以實現(xiàn)其他功能,例如,確保底層數(shù)據(jù)庫在數(shù)據(jù)發(fā)生修改時立即更新。(1)DataColumn。DataColumn存儲了在數(shù)據(jù)表中定義列所需的所有信息。在DataTable中,Columns屬性包含一個DataColumnCollection,這是一個DataColumn對象集合。DataColumn還包含與DBMD匹配的屬性,包括ColumnName、Dataype、AllowDBNull和DefaultValue。它的屬性可能比使用的DBMS的屬性還要多,但如果使用過不同的DBMS,這一點將顯而易見。對于SQLServer,這并不是問題。(2)Constaint。Constaint對象(在ConstaintCollection中,可通過DataTable.Constaints訪問)用于包含表的所有元數(shù)據(jù),這些數(shù)據(jù)不包含在DataColumn對象中。Constaint類作為更具體類的基類,這些具體類包括UniqueConstaint—用于確保給定列或列組合的值是唯一的(例如,這對于主鍵是必須的)和ForeingKeyConstaint—用于實現(xiàn)表之間的關(guān)系。(3)DataRow。DataRow類用于存儲表中一行包含的數(shù)據(jù)。通過DataTable.Rows屬性可以訪問DataRowCollection對象,后者存儲了組成表數(shù)據(jù)的多個DataRow對象。一行數(shù)據(jù)中的各列可通過索引器來訪問,索引器讓你能夠通過列名、索引和版本(例如,如果行被修改)來訪問列。行的當(dāng)前狀態(tài),即它是否被修改、刪除或以某種方式改變,可通過DataRowState屬性訪問。該屬性的值為DataRowState類型,這是一種包含所有可能行狀態(tài)的枚舉類型。各個DataRow對象也有與DataTable對應(yīng)的方法,用于接受、拒絕和獲得更改。例如,可以推斷出,調(diào)用DataTable.AcceptChanges()將級聯(lián)地對表的每行調(diào)用DataRowAcceptChanges()。6.DataRelation在處理多個DataTable對象時,通常需要表示(并實施)表數(shù)據(jù)之間的關(guān)系。這由DataRelation類來完成??蓪⒍鄠€DataRelation對象組合起來,構(gòu)成一個DataRelationCollection對象。關(guān)系可以用DataRelation類的多個屬性來定義,包括ChildTable、ChildColumns、ChildKeyConstraint、ParentTable和ParentKeyConstraint等。這些屬性都是對相應(yīng)的對象的引用,如DataTable和DataColumn對象。關(guān)系名也被存儲在DataRelation.RelationName屬性中?,F(xiàn)在還不用太擔(dān)心DataRelation對象,因為它們封裝了ADO.NET比較高級的方面,這在本書后面將介紹。7.DataSet現(xiàn)在到了ADO.NET中最重要的類—DataSet。從某種程度上說,該類只是DataTable對象和DataRelation對象的集合(如圖2.6所示)。然而,DataSet的強大功能體現(xiàn)在與其他對象結(jié)合使用,包括用于Web應(yīng)用程序和Windows應(yīng)用程序的控件、Web服務(wù)和XML文檔。DataSet類包含很多屬性和方法;其中很多與其組成部分的屬性和方法類似,例如,GetChanges()和RejectChanges()。還有一些重要的屬性,如Tables(以DataTableCollection類的形式包含DataSet中的表集合)、Relations(包含一個DataRelationCollection類,其中的Relation對象定義了表之間的關(guān)系)。數(shù)據(jù)表之間的關(guān)系及應(yīng)用于數(shù)據(jù)的約束使得對DataSet的操作很麻煩。例如,如果兩個表之間存在一對多關(guān)系,則添加一行到其中一個表中,可能要求另一個表中存在一行。而這行可能不存在(例如,如果兩行同時添加時),這時,為避免錯誤,添加這些行的順序?qū)⒑苤匾?;必須先添加位于關(guān)系“一”端的行。也可以將DataSet.EnforceConstraints屬性設(shè)置為false,這樣在執(zhí)行編輯操作時將忽略關(guān)系。(1)DataSet對象和XML之間的關(guān)系。與ADO.NET的其他對象一樣,設(shè)計DataSet對象時也考慮了XML數(shù)據(jù)。使用DataSet.GetXml()方法,可將數(shù)據(jù)集轉(zhuǎn)換為XML文檔;還可以使用DataSet.GetXmlSchema()方法只提取數(shù)據(jù)集中的架構(gòu)(包括數(shù)據(jù)集包含的所有表和其他對象的架構(gòu))作為XML文檔。還可使用序列化技術(shù)在DataSet和XML文檔之間進行轉(zhuǎn)換,因為DataSet類實現(xiàn)了IxmlSeria-lizable接口。DataSet對象與XML之間的關(guān)系以及使用序列化在這兩種表示格式之間進行轉(zhuǎn)換,在.NET框架中運用相當(dāng)廣泛。它提供了一種在應(yīng)用程序?qū)又g和通過Internet交換數(shù)據(jù)的很好方法。特別地,有了數(shù)據(jù)集的XML表示形式后,就可以在Web服務(wù)之間進行交換DataSet對象。(2)類型化數(shù)據(jù)集(typeddataset)。DataSet對象的功能很強大,但它們并不是最容易使用或最合乎邏輯的。例如,要訪問表中的特定行,使用它就顯得很笨拙。必須使用DataSet.Tables集合獲得正確的表,用DataTable.Rows集合獲得正確的行,然后以對象引用的形式或通過DataColumn的方法提取列數(shù)據(jù)—這些都不容易。訪問特定列的代碼行可能如下所示:intresult=(int)myDataSet.Tables["myTable"].Rows[5]["IntegerColumn"];還有一種方法,那就是使用類型化數(shù)據(jù)集。類型化數(shù)據(jù)集是DataSet的子類,但它包含強類型屬性和方法,使得數(shù)據(jù)操作更容易。如果使用類型化數(shù)據(jù)集,上面的代碼就可以簡化為如下所示:intresult=myTypedDataSet.MyTable[5].IntegerColumn;雖然這并不影響代碼的功能,但輸入更容易(尤其是啟用了智能感知功能時),以后閱讀代碼時也更容易理解。唯一的限制是,需要在設(shè)計時就知道數(shù)據(jù)集中將包含的數(shù)據(jù)的結(jié)構(gòu)。然而,因為數(shù)據(jù)庫的結(jié)構(gòu)不大可能有很大的改變,因此這通常不成問題。可以使用xsd.exe工具或通過VisualC#速成版界面自動創(chuàng)建類型化數(shù)據(jù)集。xsd.exe工具要求提供一個架構(gòu)(schema),這是以擴展名為.xsd的XML架構(gòu)文件提供的。VisualC#速成版在創(chuàng)建類型化數(shù)據(jù)集時也要使用架構(gòu)信息,但它直接從數(shù)據(jù)庫獲取這些信息,這使得對數(shù)據(jù)集的結(jié)構(gòu)進行操作更容易。(3)性能。有些人認(rèn)為應(yīng)盡量避免使用數(shù)據(jù)集。這是因為它們是“重量級”對象,帶來的開銷在高性能應(yīng)用程序中可能很大。另外,以數(shù)據(jù)集的形式通過Web傳輸數(shù)據(jù)可能意味著要傳輸大量的XML數(shù)據(jù)。從某種程度上說,這些擔(dān)憂是正確的。如果性能很重要,可以設(shè)計自己的類,并直接使用數(shù)據(jù)閱讀器提供的數(shù)據(jù)進行填充。然而,數(shù)據(jù)集(特別是類型化數(shù)據(jù)集)自有它們的用處。它們提供了很多特性,只需少量代碼就可以使用這些特性,且用于操作它們的代碼通常很簡單。例如,如果不沒有數(shù)據(jù)集,要表示數(shù)據(jù)庫的數(shù)據(jù),同時在類中記錄所有編輯,且這些編輯可以很容易地傳輸?shù)綌?shù)據(jù)庫,可能需要大量的代碼,且實現(xiàn)起來相當(dāng)困難。3.2.2數(shù)據(jù)綁定數(shù)據(jù)綁定是程序員只需做少量工作就可以用數(shù)據(jù)庫中的數(shù)據(jù)填充Windows或Web控件的一種技術(shù)。.NET框架讓程序員只需使用簡單的代碼就可以將數(shù)據(jù)源與控件關(guān)聯(lián)起來,實際上,可以通過GUI實現(xiàn)很多功能,而不需要編寫大量C#代碼。數(shù)據(jù)綁定有兩點要求:數(shù)據(jù)源和要綁定數(shù)據(jù)的控件。數(shù)據(jù)源包括數(shù)據(jù)庫連接,但不僅限于此,也可以使用對象或來自Web服務(wù)的數(shù)據(jù)作為數(shù)據(jù)源。使用對象作為數(shù)據(jù)源是一種功能強大的方法,可以利用自定義的集合和自己設(shè)計的類,但這有點偏題了。本書大部分時候使用的數(shù)據(jù)源類型都是數(shù)據(jù)庫數(shù)據(jù)源,它有Web控件形式,也有Windows控件形式。生成數(shù)據(jù)庫數(shù)據(jù)源時,通常不僅需要配置連接。數(shù)據(jù)庫數(shù)據(jù)源包括關(guān)于要訪問數(shù)據(jù)庫中哪些對象的信息。實際上,在幕后通常將生成類型化數(shù)據(jù)集。此外,幕后還將用到前面介紹的ADO.NET對象(連接、命令、數(shù)據(jù)閱讀器和數(shù)據(jù)適配器協(xié)同工作來創(chuàng)建數(shù)據(jù)源)。然而,程序員不必太擔(dān)心這一點,而只需創(chuàng)建一個數(shù)據(jù)源并將它綁定到控件,如圖2.7所示。圖2.7

數(shù)據(jù)綁定要綁定到控件,需要將控件的屬性設(shè)置為數(shù)據(jù)源的元素(從而間接地設(shè)置為數(shù)據(jù)庫的元素)。對于簡單控件,如標(biāo)簽或文本框,只要將控件的Text屬性設(shè)置為數(shù)據(jù)庫中類型為文本的列。還可以將數(shù)據(jù)綁定到列表控件(包括下拉列表),這樣列表中的每項都綁定到數(shù)據(jù)庫表中的一行。更高級的控件(如GridView)可用于查看整個表的內(nèi)容。另外,也可以提供自定義的控件和自定義的數(shù)據(jù)綁定架構(gòu),以便使用和編輯數(shù)據(jù)庫中的數(shù)據(jù)。3.3SQL語言通用的SQL語言,最早于1974年提出,當(dāng)時稱為SEQUEL語言,后來被國際標(biāo)準(zhǔn)化組織ISO采納為國際標(biāo)準(zhǔn),現(xiàn)在大多數(shù)數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言。SQL是一種處理數(shù)據(jù)的高級語言,是非過程化語言,在查詢數(shù)據(jù)時,只需指出“要什么”,而不需指出如何實現(xiàn)的過程。SQL語言包括數(shù)據(jù)定義、查詢、操縱和控制功能。SQL語言的語法格式簡單,使用方便靈活。3.3.1表定義語句廣義上講,表定義語句包括數(shù)據(jù)表的創(chuàng)建語句(Create語句)、數(shù)據(jù)表修改語句(Alter語句)和數(shù)據(jù)表刪除語句(Drop語句)。3.3.2視圖定義語句視圖是對數(shù)據(jù)表中數(shù)據(jù)的一種顯示方式,用一個數(shù)據(jù)表可以有多個視圖,以根據(jù)用戶的不同需求,將數(shù)據(jù)表中用戶所關(guān)心的數(shù)據(jù)提取出來,顯示給用戶,忽略數(shù)據(jù)表中其他數(shù)據(jù)。視圖也可以理解為一種預(yù)先定義好的查詢。實際上,查詢的優(yōu)點在于可在多個數(shù)據(jù)表之間按指定的條件對數(shù)據(jù)進行篩選顯示。3.3.3索引定義語句索引是加速數(shù)據(jù)查詢的重要手段,索引一旦被建立起來,就成為了數(shù)據(jù)庫的一部份,并占用數(shù)據(jù)庫的存儲空間。使用索引的突出優(yōu)點就是加快數(shù)據(jù)的查詢速度,但是,對于數(shù)據(jù)的插入、刪除和修改操作來說,索引卻降低了執(zhí)行效率。3.3.4數(shù)據(jù)操縱語句數(shù)據(jù)操縱包括數(shù)據(jù)的插入、更新和刪除等操作,數(shù)據(jù)操縱語句是應(yīng)用程序編制過程中使用較多的語句之一。3.3.5INSERT語句INSERT語句所實現(xiàn)的功能是向數(shù)據(jù)庫中插入新的數(shù)據(jù),該語句的一般語法如下:InsertintotableName[(fieldList)]values(valueList)3.3.6UPDATE語句UPDATE語句用于更新數(shù)據(jù)表中的數(shù)據(jù)。所謂的更新是指數(shù)據(jù)已經(jīng)存在于數(shù)據(jù)表,但需要對其中的數(shù)據(jù)進行修改,此時可以使用UPDATE語句實現(xiàn)。3.3.7DELETE語句如果某些數(shù)據(jù)需要從數(shù)據(jù)表中刪除,則可以使用DELETE語句進行,該語句的基本語法如下:DeletefromtableName[Whereselect_conditon]3.3.8查詢語句查詢語句是SQL語言中使用最為頻繁的語句,查詢可以根據(jù)需要在數(shù)據(jù)表內(nèi)或者多個數(shù)據(jù)表之間進行數(shù)據(jù)篩選。熟練掌握數(shù)據(jù)查詢語句,才能編寫出高質(zhì)量的數(shù)據(jù)庫管理軟件。查詢是SQL語言最重要最核心的功能之一。在SQL語言中查詢是通過Select語句實現(xiàn)的,最簡單的SQL語句結(jié)構(gòu)如下:Select字段列表From表名3.3.9條件查詢Select語句除了可以對字段進行篩選以外,還可以對記錄進行篩選和操作,此時,要用到Where字句。Where子句在Select語句中用于指定查詢條件,其結(jié)構(gòu)一般如下:Select字段列表from表名Where條件表達式3.3.10查詢排序SQL語句還可以對查詢的結(jié)果進行排序,此時,要用到Orderby子句。另外,還要用到兩個負(fù)責(zé)排序方式的關(guān)鍵詞ASC和DESC,ASC指明按升序排列查詢結(jié)果;DESC則指明按降序進行排列。排序查詢的結(jié)構(gòu)一般如下:SelectfieldlistFromtableName[Whereselect_conditon]Orderbyfield1[ASC|DESC],field2[ASC|DESC]3.3.11統(tǒng)計查詢SQL語言對數(shù)值型的字段具有統(tǒng)計的功能,該功能涉及到5個統(tǒng)計函數(shù),介紹如下:Count(*):統(tǒng)計符合查詢條件的記錄的個數(shù)。AVG(field):計算某個數(shù)值型字段的平均值。Max(field):返回某個數(shù)值型字段的最大值。Min(field):返回某個數(shù)值型字段的最小值。Sum(field):計算某個數(shù)值型字段所有記錄的和。3.3.12Groupby子句Groupby子句的作用是將查詢結(jié)果中的數(shù)據(jù)按指定字段分組,Groupby子句常與統(tǒng)計函數(shù)一起使用,以對查詢數(shù)據(jù)實現(xiàn)分組統(tǒng)計。Groupby子句的一般語法如下:Groupby字段1,字段23.3.13Distinct關(guān)鍵詞在數(shù)據(jù)表的某個字段中可能會出現(xiàn)多個重復(fù)的值,使用Distinct關(guān)鍵字可以避免查詢結(jié)果中出現(xiàn)重復(fù)的記錄。含Distinct關(guān)鍵詞的SQL語句結(jié)構(gòu)一般如下:SelectDistinct字段名列表From表名Where條件表達式3.3.14Top關(guān)鍵詞Top關(guān)鍵詞的作用是限制查詢結(jié)果的返回數(shù)目。該關(guān)鍵詞常被用來限制顯示查詢結(jié)果中前多少個或者前百分之多少的記錄。因此,Top關(guān)鍵詞經(jīng)常和Orderby子句一起出現(xiàn)。Top關(guān)鍵詞的基本語法:TopnTopnPercent3.3.15多表查詢SQL語言還可以實現(xiàn)在同一個數(shù)據(jù)庫中的不同數(shù)據(jù)表之間進行查詢。3.3.16多重查詢SQL語句允許嵌套使用,這種查詢一般是把其中一個查詢的結(jié)果作為另一個查詢語句的查詢條件。多重查詢中一般會出現(xiàn)In、NotIn、All、Some或者Any等關(guān)鍵詞。In和NotIn用來指定某值在和不在某區(qū)間或者集合;All表示集合中的全部,而Some和Any則表示集合中的一部分。3.3.17EXISTS關(guān)鍵詞EXISTS(NOTEXISTS)關(guān)鍵詞是復(fù)合查詢語句中的常用關(guān)鍵詞,其作用是判斷復(fù)合查詢語句的內(nèi)層查詢是否存在查詢結(jié)果。使用EXISTS關(guān)鍵詞時內(nèi)層查詢只是起到一個判斷是否存在查詢結(jié)果的作用,其篩選出的數(shù)據(jù)對整個查詢沒有任何作用。4系統(tǒng)需求分析4.1系統(tǒng)流程圖如下子模塊員工管理功能圖如下:用戶管理:主要用于管理不同職能的員工信息,可以實現(xiàn)創(chuàng)建,修改,刪除員工職能信息的功能。系統(tǒng)運行界面圖如下:對應(yīng)的數(shù)據(jù)庫設(shè)計圖:員工基本信息:企業(yè)人事檔案管理信息化模塊;具有快速、無限量員工數(shù)據(jù)輸入及保存功能;由特定權(quán)限的管理員統(tǒng)一管理員工檔案。對員工從進入公司開始直至離職的整個過程進行人面管理,檔案信息包括,職員編號,職員姓名,出生年月,職工學(xué)歷,定時檢查更新員工信息,具有權(quán)限的使用者可以登記、查詢、修改、統(tǒng)計部門信息、崗位設(shè)置情況。圖如下:對應(yīng)的數(shù)據(jù)庫設(shè)計如下:社會關(guān)系:主要用于建立和保存職員的社會關(guān)系,以備侯用。運行圖如下:對應(yīng)的數(shù)據(jù)庫系統(tǒng)設(shè)計:學(xué)習(xí)經(jīng)歷維護:主要記錄員工各個階段不同部門學(xué)習(xí)的情況。系統(tǒng)運行圖對應(yīng)的數(shù)據(jù)庫設(shè)計:部門設(shè)置:可以添加、修改、刪除部門。系統(tǒng)運行圖:對應(yīng)的數(shù)據(jù)庫設(shè)計:崗位調(diào)整:主要用于讓公司找到員工的強項并讓員工發(fā)揮最大作用。對應(yīng)的數(shù)據(jù)庫設(shè)計:工資考勤信息管理功能圖如下:下載考勤信息:用于記錄員工的考勤情況。系統(tǒng)運行圖如下:對應(yīng)的數(shù)據(jù)庫設(shè)計圖:考評管理:用于實時調(diào)查員工的工作情況,調(diào)整好他們最佳工作狀態(tài),可以促進良性競爭和增強企業(yè)的活力。系統(tǒng)運行圖:對應(yīng)的數(shù)據(jù)庫設(shè)計圖如下:稅率管理:主要用于計算稅率,可以升級工資模塊,跟時代同步。系統(tǒng)運行圖如下:相應(yīng)的數(shù)據(jù)庫設(shè)計如圖:獎懲管理:賞罰分明,調(diào)動企業(yè)工作氣氛。系統(tǒng)運行圖如下:對應(yīng)的數(shù)據(jù)庫設(shè)計圖如下:工資調(diào)整管理:工資的合理調(diào)整可以有效調(diào)動員工積極性。系統(tǒng)運行圖如下:對應(yīng)的數(shù)據(jù)庫設(shè)計圖如下:工資項目管理:用于基本工資和參數(shù)的記錄和調(diào)整。系統(tǒng)運行圖如下:對應(yīng)數(shù)據(jù)庫設(shè)計圖如下:工資匯總統(tǒng)計:用于員工工資的報表顯示。如圖:系統(tǒng)設(shè)置圖如下:系統(tǒng)設(shè)置:主要用于數(shù)據(jù)庫的備份和維護。運行圖如下:連接到數(shù)據(jù)庫:進行數(shù)據(jù)庫備份或者恢復(fù):系統(tǒng)大概流程和功能介紹:系統(tǒng)登陸:安全作用,設(shè)置管理員的賬號用于登陸與維護。。系統(tǒng)主界面:增強更為人性化的功能:比如操作助手:企業(yè)員工生日提醒如圖:增強更為美觀的界面:參考文獻:[1]王珊,陳紅.數(shù)據(jù)庫系統(tǒng)原理教程[M].北京:清華大學(xué)出版社,2008。[2]李曉喆.SQLServer2000管理及應(yīng)用系統(tǒng)開發(fā)[M].北京:人民郵電出版社,2002。[3]侯曉霞,柴洪輝.C#技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2002。[4]李敏波.C#高級編程[M].北京:清華大學(xué)出版社,2005。[5]張志華,劉云鵬.C#設(shè)計模式[M].北京:電子工業(yè)出版社,2003。[6]張曉坤,譚立平,車樹良.C#編程語言詳解[M].北京:電子工業(yè)出版社,2004。[7]周存杰.Visual.C#.NET.網(wǎng)絡(luò)核心編程[M].北京:清華大學(xué)出版社,2002。[8]姜力,高群.SQLServer數(shù)據(jù)庫設(shè)計與管理[M].北京:中國林業(yè)出版社,2006。 致謝首先衷心感謝我的導(dǎo)師謝光強老師對我學(xué)術(shù)上的指導(dǎo)和幫助。在畢業(yè)設(shè)計和論文寫作的過程中,謝老師給我提供了各種意見與支持,并引導(dǎo)我逐步解決各種問題,使我的畢業(yè)論文條理化、規(guī)范化,同時使我增長了見識、提高了水平。謝老師學(xué)識淵博、治學(xué)嚴(yán)謹(jǐn),作為我的導(dǎo)師讓我感到萬分的榮幸。同時感謝同事,他為我提供了一些c#學(xué)習(xí)資料。最后,還要感謝所有幫助過我和關(guān)心過我的人。忠心的說一聲“謝謝”。附錄F各模塊實現(xiàn)的主要源代碼F1.1登錄模塊的設(shè)計與實現(xiàn)的主要代碼if(tbxUserCode.Text.Trim()==""){BigMessageBox.Show("請您輸入用戶或密碼!!","警告",MessageBoxButtons.OK,MessageBoxIcon.Stop);this.tbxUserCode.Text="";this.tbxUserCode.Text="";this.tbxUserCode.Focus();return

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論