人事管理系統(tǒng)畢業(yè)論文19467
《人事管理系統(tǒng)畢業(yè)論文19467》由會(huì)員分享,可在線閱讀,更多相關(guān)《人事管理系統(tǒng)畢業(yè)論文19467(74頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
BatchDoc Word文檔批量處理工具 人事管理系統(tǒng) 2 摘 要 2 1前言 4 1.2 人事管理系統(tǒng)發(fā)展趨勢(shì) 5 1.2.1 世界趨勢(shì) 5 1.2.2 技術(shù)革新 5 1.2.3 工作目標(biāo)和價(jià)值觀的改變 5 1.3 系統(tǒng)調(diào)研 6 1.3.1 社會(huì)可行性分析 6 1.3.2 技術(shù)可行性分析 6 1.3.3 經(jīng)濟(jì)可行性分析 6 1.3.4 管理可行性分析 7 2開發(fā)工具及其語言特點(diǎn) 7 2.2.1簡(jiǎn)潔的語法 8 2.2.2精心地面向?qū)ο笤O(shè)計(jì) 9 2.2.3與Web的緊密結(jié)合 10 2.2.4完整的安全性與錯(cuò)誤處理 10 2.2.5版本處理技術(shù) 11 2.2.6靈活性和兼容性 11 3數(shù)據(jù)庫(kù)概述 12 3.1SQL Server 2008主要特點(diǎn) 12 3.1.1.NET框架 12 3.1.2XML技術(shù) 12 3.1.3ADO.NET2.0版本 12 3.1.4增強(qiáng)的安全性 12 3.1.5Transact-SQL的增強(qiáng)性能 13 3.1.6SQL服務(wù)中介 13 3.1.7通告服務(wù) 13 3.1.8Web服務(wù) 13 3.1.9報(bào)表服務(wù) 13 3.1.10全文搜索功能的增強(qiáng) 14 3.2C#與ADO.NET 14 3.2.1 C#中的數(shù)據(jù)庫(kù)訪問 14 3.2.2 數(shù)據(jù)綁定 24 3.3 SQL語言 25 3.3.1數(shù)據(jù)定義語句 25 3.3.2視圖定義語句 25 3.3.3索引定義語句 26 3.3.4數(shù)據(jù)操縱語句 26 3.3.5INSERT語句 26 3.3.6UPDATE語句 26 3.3.7DELETE語句 26 3.3.8查詢語句 27 3.3.9條件查詢 27 3.3.10查詢排序 27 3.3.11統(tǒng)計(jì)查詢 27 3.3.12Group by子句 28 3.3.13Distinct關(guān)鍵詞 28 3.3.14Top關(guān)鍵詞 28 3.3.15多表查詢 28 3.3.16子查詢 28 3.3.17備份/還原數(shù)據(jù)庫(kù) 29 4數(shù)據(jù)庫(kù)設(shè)計(jì) 29 5系統(tǒng)需求分析 33 5.1系統(tǒng)流程圖如下 33 附錄 各模塊實(shí)現(xiàn)的主要源代碼 49 1.1登錄模塊的設(shè)計(jì)與實(shí)現(xiàn)的主要代碼 49 1.2登陸實(shí)體類: 50 Model類庫(kù) 50 DAL類庫(kù) 52 BLL類庫(kù) 52 1.3基礎(chǔ)信息管理實(shí)現(xiàn)的主要代碼: 53 1.4人事管理實(shí)現(xiàn)主要代碼: 54 1.5考勤管理實(shí)現(xiàn)主要代碼: 61 1.6職工培訓(xùn)實(shí)現(xiàn)主要代碼: 62 1.7 工資管理實(shí)現(xiàn)主要代碼: 64 1.8備忘錄主要代碼: 66 1.9 工具管理主要代碼: 70 2.0 數(shù)據(jù)庫(kù)管理主要代碼: 70 //還原數(shù)據(jù)庫(kù) 71 2.1 系統(tǒng)管理主要代碼: 72 人事管理系統(tǒng) 摘 要 在當(dāng)今社會(huì),互聯(lián)網(wǎng)空前的發(fā)展,給人們的工作和生活帶來了極大的便利和高效,信息化,電子化已經(jīng)成為節(jié)約運(yùn)營(yíng)成本,提高工作效率的首選??紤]到當(dāng)前大量企業(yè)的人事管理尚處于手工作業(yè)階段,不但效率低下,還常常因?yàn)楣芾淼牟簧鞫霈F(xiàn)紕漏。因此根據(jù)部分企業(yè)提供的需求,設(shè)計(jì)此人事管理系統(tǒng),以幫助企業(yè)達(dá)到人事管理辦公自動(dòng)化、節(jié)約管理成本、提高企業(yè)工作效率的目的。 本人事管理系統(tǒng)采用B/S結(jié)構(gòu),主要對(duì)企業(yè)員工的信息以及跟人事相關(guān)的工作流程進(jìn)行集中的管理,方便企業(yè)建立一個(gè)完善的、強(qiáng)大的員工信息數(shù)據(jù)庫(kù)管理。它是以Visual Studio .NET 2008 技術(shù) 和 SQL Server 2005 數(shù)據(jù)庫(kù)作為開發(fā)平臺(tái)。使用C#語言設(shè)計(jì)操作控件和編寫操作程序,完成數(shù)據(jù)添加、修改、刪除、存儲(chǔ)、調(diào)用查詢等功能;并使用SQL Server 2005數(shù)據(jù)庫(kù)形成數(shù)據(jù)表,進(jìn)行數(shù)據(jù)存儲(chǔ)。 本文詳細(xì)介紹了人事管理系統(tǒng)的功能需求,系統(tǒng)設(shè)計(jì)和具體實(shí)現(xiàn)。并簡(jiǎn)要介紹了系統(tǒng)開發(fā)采用的過程方法。 關(guān)鍵詞 人事管理系統(tǒng);B/S;.NET;SQL Server;C#;數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)管理 The Design And Implementation Of Personnel Management System Based On B/S Abstract In todays society, the Internet an unprecedented development, to peoples work and life has brought great convenience and high efficiency, information, electronic has become save operational costs, improve the work efficiency of the first choice. Considering the current large enterprise personnel management is still in manual work stage, not only the efficiency is low, often because of management carelessly and leaks. So according to some enterprises to provide requirements, design the personnel management system, in order to help enterprises to achieve personnel management office automation, saving management cost and improve enterprise efficiency purpose. The personnel management system use B/S structure, mainly to enterprise staffs information and personnel related to the work flow for centralized management, convenient enterprises to establish a perfect, strong employee information database management. It is Visual Studio ASP.NET 2008 technology and SQL Server 2005 database as a development platform. Using c # language design operation control and write operation procedure, complete data add, modify, delete, storage, call the function such as inquires, And use the SQL Server 2005 database form data table, data storage. This paper introduces the personnel management of the functional requirements of the system, system design and realization. And briefly introduces the system development process of the method. Key words: Personnel management system; B/S;.NET; SQL Server;Database; Database management 1前言 1.1 應(yīng)用的目的與意義 人的管理是一切管理工作的核心。員工代表一個(gè)企業(yè)的形象,因而人事管理機(jī)制設(shè)計(jì)的好壞,直接影響一個(gè)企業(yè)的成敗。 員工的檔案管理是企業(yè)人事管理的基礎(chǔ),在企業(yè)員工普遍流失的今天,一個(gè)準(zhǔn)確而及時(shí)的人事管理系統(tǒng),有利于人事部門對(duì)員工流動(dòng)進(jìn)行分析、編制,為企業(yè)所需人員提供了保障。 人力資源部那些重復(fù)的,事務(wù)性的工作交給PMS(Personnel Management System,人事管理系統(tǒng))來解決,可以省去用戶以往人力資源管理工作的繁瑣、枯燥;用領(lǐng)先的人力資源管理理念,把人力資源管理的作業(yè)流程控制和戰(zhàn)略規(guī)劃設(shè)計(jì)巧妙地集合于一體;系統(tǒng)重點(diǎn)涉及到人力資源管理工作中的員工資料、考勤、績(jī)效、工資、培訓(xùn)、備忘錄、工具管理、等員工基本相關(guān)信息、用戶管理以及用戶角色權(quán)限分配等方面,并有綜合的系統(tǒng)數(shù)據(jù)庫(kù)還原/備份、數(shù)據(jù)清空、及系統(tǒng)操作日志的導(dǎo)出管理??梢院芎玫貫橛脩舻娜肆Y源管理部門在對(duì)員工的成本管理、考勤管理、工資管理等綜合管理給予幫助。 1.2 人事管理系統(tǒng)發(fā)展趨勢(shì) 1.2.1 世界趨勢(shì) 人事管理系統(tǒng)主導(dǎo)21世紀(jì),無論是發(fā)達(dá)國(guó)家還是發(fā)展中國(guó)家,對(duì)人力資源的戰(zhàn)略性意義都有了深刻的認(rèn)識(shí),并開始付諸行動(dòng)。世界公認(rèn),21世紀(jì)將是人力資源的世紀(jì);人力資源問題將主導(dǎo)整個(gè)21世紀(jì)甚至更為遙遠(yuǎn),這種狀況的變化起因于競(jìng)爭(zhēng)壓力。目前,世界經(jīng)濟(jì)趨向全球化。世界經(jīng)濟(jì)的全球化過程和國(guó)家的開放過程,要求組織的管理部門降低管理成本以減少競(jìng)爭(zhēng)壓力和增強(qiáng)競(jìng)爭(zhēng)能力。對(duì)于不同的組織,人力資源成本在總成本中的比例是不一樣的。 1.2.2 技術(shù)革新 無論是現(xiàn)在還是將來,工業(yè)的發(fā)展越來越多地取決于科學(xué)和技術(shù)、知識(shí)與技能。高新科技產(chǎn)業(yè)更是如此。這不僅要求員工尤其是技術(shù)人員掌握新的科學(xué)知識(shí)和技術(shù)能力,而且更重要的在于要求員工深入而快捷地掌握和應(yīng)用這些知識(shí)和技能。這就導(dǎo)致了兩個(gè)問題。第一,隨著這種技術(shù)革新的發(fā)展和知識(shí)更新速度的加快,人們有更多的職業(yè)選擇機(jī)會(huì)。第二,伴隨著這種發(fā)展以及職業(yè)選擇機(jī)會(huì)的增多,人力資源管理活動(dòng)和頻繁程度加??;而且這種活動(dòng)對(duì)科學(xué)技術(shù)的要求與它的反應(yīng)程度也更高了,進(jìn)而提高了人力資源成本。 1.2.3 工作目標(biāo)和價(jià)值觀的改變 隨著社會(huì)政治和經(jīng)濟(jì)的發(fā)展,人們的工作目標(biāo)和價(jià)值觀也都發(fā)生了重要的變化。這就對(duì)人事管理部門和管理人員提出了新的要求和新的問題,不得不考慮諸如工作類型設(shè)計(jì)、崗位分析、充分尊重員工以及為他們提供良好的個(gè)人發(fā)展和自我價(jià)值實(shí)現(xiàn)的環(huán)境與條件等問題。這樣,人力資源管理就派上了用場(chǎng)。 1.3 系統(tǒng)調(diào)研 1.3.1 社會(huì)可行性分析 隨著計(jì)算機(jī)的發(fā)展與普及,以及互聯(lián)網(wǎng)技術(shù)的擴(kuò)展,日常勞資人事管理必將實(shí)現(xiàn)無紙化辦公,并且加入到公司內(nèi)部的Intranet或者是Internet上去,實(shí)現(xiàn)數(shù)據(jù)的共享,這樣有利于勞資人事信息在單位內(nèi)部的查詢,提高了數(shù)據(jù)資源的利用,并且能及時(shí)的得到更新,不需要象過去那樣浪費(fèi)大量的人力物力去進(jìn)行抄寫,提高了工作的效率 1.3.2 技術(shù)可行性分析 Visual Studio.NET提供了一個(gè)統(tǒng)一的、緊密集成的可視化編程環(huán)境,簡(jiǎn)化了開發(fā)應(yīng)用程序的過程,縮短了實(shí)用方法的時(shí)間。利用Visual Studio.NET,可以非常輕松地創(chuàng)建具有自動(dòng)伸縮能力的可靠的應(yīng)用程序和組件。而且微軟的優(yōu)秀成果C#語言保持了C/C++所特有的強(qiáng)大功能和控制能力。與C++十分相似的模型和語法,具有與COM+服務(wù)完全的交互性和完全支持能力,能夠輕松地遷移現(xiàn)有的代碼。數(shù)據(jù)庫(kù)方面SQL Server 2005已經(jīng)可以滿足中小型企業(yè)的數(shù)據(jù)要求,甚至有些大型企業(yè)都可以達(dá)到要求。如今計(jì)算機(jī)普及程度日益推廣,計(jì)算機(jī)配置日新月異,能承載此系統(tǒng)的機(jī)器就如辦公的機(jī)器都可以達(dá)到要求。所以說本系統(tǒng)具有技術(shù)可行性。 1.3.3 經(jīng)濟(jì)可行性分析 采用傳統(tǒng)的手工輸入方法,不僅工作繁瑣而且需要人力輸入多,記錄容易出錯(cuò),那樣產(chǎn)生了成本高,效果差的弊病,對(duì)于一個(gè)企業(yè)的資料庫(kù)建立是十分困難和麻煩的。而采用這種系統(tǒng)所發(fā)費(fèi)的成本,精力都遠(yuǎn)遠(yuǎn)低于手工,并且實(shí)用十分方便,更新也簡(jiǎn)易,每個(gè)部門只需一個(gè)人統(tǒng)一管理,對(duì)企業(yè)實(shí)現(xiàn)辦公無紙化能起到很大的作用。所以此系統(tǒng)經(jīng)濟(jì)可行性也具備了。 1.3.4 管理可行性分析 本系統(tǒng)采用了系統(tǒng)數(shù)據(jù)庫(kù)備份、恢復(fù)的功能,而且界面層次分明,一目了然,加上設(shè)計(jì)方面加入了人性化元素。管理此系統(tǒng)并不難,易學(xué)易會(huì)。 2開發(fā)工具及其語言特點(diǎn) 2.1 Visual Studio.NET主要特點(diǎn) 2.1.1提供加速開發(fā)過程的高效工具 Visual Studio.NET提供了一個(gè)統(tǒng)一的、緊密集成的可視化編程環(huán)境,以幫助用戶簡(jiǎn)化開發(fā)網(wǎng)絡(luò)應(yīng)用程序的過程,縮短學(xué)習(xí)使用方法的時(shí)間。它提供了一種新的語言——C#。通過共享的HTML、XML和樣式單編輯器,用戶可以輕松地借助包括C#在內(nèi)的任何一種Visual Studio語言來開發(fā)網(wǎng)絡(luò)應(yīng)用程序。 2.1.2 提供對(duì)各種網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計(jì)能力 借助WebForm,用戶可以用他們?cè)陂_發(fā)基于網(wǎng)頁(yè)的應(yīng)用程序時(shí)所使用的技巧來創(chuàng)建跨瀏覽器的網(wǎng)絡(luò)應(yīng)用程序。 2.1.3 利用XML和Web Service來簡(jiǎn)化分布式計(jì)算 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被用來對(duì)上述功能請(qǐng)求的參數(shù)進(jìn)行格式統(tǒng)一,從而使這些請(qǐng)求能夠使用于所有的軟件和硬件。這樣使得對(duì)Web Service的訪問可以通過任何一種語言、使用任何一種組件模型在任何一種操作系統(tǒng)上實(shí)現(xiàn)。 2.1.4快速構(gòu)建中間層商務(wù)組件 Visual Studio的一個(gè)核心目標(biāo)就是要為基于服務(wù)器的應(yīng)用程序提供應(yīng)用程序快速部署工具。利用Visual Studio.NET創(chuàng)建的組件將為您的商務(wù)運(yùn)作提供足夠的功能和伸縮性。 2.1.5構(gòu)建可靠的可伸縮解決方案 利用Visual Studio.NET,用戶可以非常輕松地創(chuàng)建具有自動(dòng)伸縮能力的可靠的應(yīng)用程序和組件。 2.2 C#技術(shù)概述 C#在帶來對(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ì)給你帶來任何其它的麻煩,快速應(yīng)用程序開發(fā)(Rapid Application Development,RAD)的思想與簡(jiǎn)潔的語法將會(huì)使你迅速成為一名熟練的開發(fā)人員。 C#是專門為.NET應(yīng)用而開發(fā)出的語言。這從根本上保證了C#與.NET框架的完美結(jié)合。在.NET運(yùn)行庫(kù)的支持下,.NET框架的各種優(yōu)點(diǎn)在C#中表現(xiàn)得淋漓盡致。C#的一些突出的特點(diǎn) ●簡(jiǎn)潔的語法 ●精心地面向?qū)ο笤O(shè)計(jì) ●與Web的緊密結(jié)合 ●完整的安全性與錯(cuò)誤處理 ●版本處理技術(shù) ●靈活性與兼容性 2.2.1簡(jiǎn)潔的語法 在缺省的情況下,C#的代碼在.NET框架提供的“可操縱”環(huán)境下運(yùn)行,不允許直接地內(nèi)存操作。它所帶來的最大的特色是沒有了指針。與此相關(guān)的是,那些在C++中被瘋狂使用的操作符(例如:“::”、“->”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個(gè)“.”,對(duì)于我們來說,現(xiàn)在需要理解的一切僅僅是名字的嵌套而已。 C#用真正的關(guān)鍵字換掉了那些把活動(dòng)模板庫(kù)(Active Template Library,ALT)和COM搞得亂糟糟的偽關(guān)鍵字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.NET類庫(kù)中都有了新名字。 語法中的冗余是C++中的常見的問題,比如"const"和"#define"、各種各樣的字符類型等等。C#對(duì)此進(jìn)行了簡(jiǎn)化,只保留了常見的形式,而別的冗余形式從它的語法結(jié)構(gòu)中被清除了出去。 2.2.2精心地面向?qū)ο笤O(shè)計(jì) 從Smalltalk開始,面向?qū)ο蟮脑掝}就始終纏繞著任何一種現(xiàn)代程序設(shè)計(jì)語言。的確,C#具有面向?qū)ο蟮恼Z言所應(yīng)有的一切特性:封裝、繼承與多態(tài)性,這并不出奇。然而,通過精心地面向?qū)ο笤O(shè)計(jì),從高級(jí)商業(yè)對(duì)象到系統(tǒng)級(jí)應(yīng)用,C#建造廣泛組件的絕對(duì)選擇。在C#的類型系統(tǒng)中,每種類型都可以看作一個(gè)對(duì)象。C#提供了一個(gè)叫做裝箱(boxing)與拆箱(unboxing)的機(jī)制來完成這種操作,而不給使用者帶來麻煩,這在以后的章節(jié)中將進(jìn)行更為詳細(xì)的介紹。 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)的基礎(chǔ)之上,其對(duì)象模型是.NET基礎(chǔ)架構(gòu)的一部分,而不再是其本身的組成部分。在下面將會(huì)談到,這樣做的另一個(gè)好處是兼容性。 借助于從VB中得來的豐富的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)。 2.2.3與Web的緊密結(jié)合 .NET中新的應(yīng)用程序開發(fā)模型意味著越來越多的解決方案需要與Web標(biāo)準(zhǔn)相統(tǒng)一,例如超文本標(biāo)記語言(Hypertext Markup Language,HTML)和XML。由于歷史的原因,現(xiàn)存的一些開發(fā)工具不能與Web緊密地結(jié)合。SOAP的使用使得C#克服了這一缺陷,大規(guī)模深層次的分布式開發(fā)從此成為可能。 由于有了Web服務(wù)框架的幫助,對(duì)程序員來說,網(wǎng)絡(luò)服務(wù)看起來就象是C#的本地對(duì)象。程序員們能夠利用他們已有的面向?qū)ο蟮闹R(shí)與技巧開發(fā)Web服務(wù)。僅需要使用簡(jiǎn)單的C#語言結(jié)構(gòu),C#組件將能夠方便地為Web服務(wù),并允許它們通過Internet被運(yùn)行在任何操作系統(tǒng)上的任何語言所調(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ù)。 2.2.4完整的安全性與錯(cuò)誤處理 語言的安全性與錯(cuò)誤處理能力,是衡量一種語言是否優(yōu)秀的重要依據(jù)。任何人都會(huì)犯錯(cuò)誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對(duì)不屬于自己管理范圍的內(nèi)存空間進(jìn)行修改,這些錯(cuò)誤常常產(chǎn)生難以預(yù)見的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡(jiǎn)單錯(cuò)誤的代價(jià)將會(huì)是讓人無法承受的。C#的先進(jìn)設(shè)計(jì)思想可以消除軟件開發(fā)中的許多常見錯(cuò)誤,并提供了包括類型安全在內(nèi)的完整的安全性能。為了減少開發(fā)中的錯(cuò)誤,C#會(huì)幫助開發(fā)者通過更少的代碼完成相同的功能,這不但減輕了編程人員的工作量,同時(shí)更有效地避免了錯(cuò)誤的發(fā)生。 .NET運(yùn)行庫(kù)提供了代碼訪問安全特性,它允許管理員和用戶根據(jù)代碼的ID來配置安全等級(jí)。在缺省情況下,從Internet和Intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,一個(gè)在網(wǎng)絡(luò)上的共享目錄中運(yùn)行的程序,如果它要訪問本地的一些資源,那么異常將被觸發(fā),它將會(huì)無情地被異常扔出去,若拷貝到本地硬盤上運(yùn)行則一切正常。內(nèi)存管理中的垃圾收集機(jī)制減輕了開發(fā)人員對(duì)內(nèi)存管理的負(fù)擔(dān)。.NET平臺(tái)提供的垃圾收集器(Garbage Collection,GC)將負(fù)責(zé)資源的釋放與對(duì)象撤銷時(shí)的內(nèi)存清理工作。 變量類型是安全的。C#中不能使用未初始化的變量,對(duì)象的成員變量由編譯器負(fù)責(zé)將其置為零,當(dāng)局部變量未經(jīng)初始化而被使用時(shí),編譯器將做出提醒;C#不支持不安全的指向,不能將整數(shù)指向引用類型,例如對(duì)象,當(dāng)進(jìn)行下行指向時(shí),C#將自動(dòng)驗(yàn)證指向的有效性;C#中提供了邊界檢查與溢出檢查功能。 2.2.5版本處理技術(shù) C#提供內(nèi)置的版本支持來減少開發(fā)費(fèi)用,使用C#將會(huì)使開發(fā)人員更加輕易地開發(fā)和維護(hù)各種商業(yè)用戶。升級(jí)軟件系統(tǒng)中的組件(模塊)是一件容易產(chǎn)生錯(cuò)誤的工作。在代碼修改過程中可能對(duì)現(xiàn)存的軟件產(chǎn)生影響,很有可能導(dǎo)致程序的崩潰。為了幫助開發(fā)人員處理這些問題,C#在語言中內(nèi)置了版本控制功能。例如:函數(shù)重載必須被顯式聲明,而不會(huì)象在C++或java中經(jīng)常發(fā)生的那樣不經(jīng)意地被進(jìn)行,這可以防止代碼級(jí)錯(cuò)誤和保留版本化的特性。另一個(gè)相關(guān)的特性是接口和接口繼承的支持。這些特性可以保證復(fù)雜的軟件可以被方便地開發(fā)和升級(jí)。 2.2.6靈活性和兼容性 在簡(jiǎn)化語法的同時(shí),C#并沒有失去靈活性。盡管它不是一種無限制語言,比如:它不能用來開發(fā)硬件驅(qū)動(dòng)程序,在默認(rèn)的狀態(tài)下沒有指針等等,但是,在學(xué)習(xí)過程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。 如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來,你將能夠使用指針、結(jié)構(gòu)和靜態(tài)數(shù)組,并且調(diào)用這些非安全代碼不會(huì)帶來任何其它的問題。此外,它還提供了一個(gè)另外的東西(這樣的稱呼多少有些不敬)來模擬指針的功能--delegates,代表。再舉一個(gè)例子:C#不支持類的多繼承,但是通過對(duì)接口的繼承,你將獲得這一功能。 2.2.7安全性 正是由于其靈活性,C#允許與C風(fēng)格的需要傳遞指針型參數(shù)的API進(jìn)行交互操作,DLL的任何入口點(diǎn)都可以在程序中進(jìn)行訪問。C#遵守.NET公用語言規(guī)范(Common Language Specification,CLS),從而保證了C#組件與其它語言組件間的互操作性。元數(shù)據(jù)(Metadata)概念的引入既保證了兼容性,又實(shí)現(xiàn)了類型安全。 3數(shù)據(jù)庫(kù)概述 3.1SQL Server 2008主要特點(diǎn) 3.1.1.NET框架 使用SQL Server2008,開發(fā)人員通過使用相似的語言,例如微軟的Visual C#.NET和微軟的Visual Basic,將能夠創(chuàng)立數(shù)據(jù)庫(kù)對(duì)象。開發(fā)人員還將能夠建立兩個(gè)新的對(duì)象——用戶定義的類和集合。 3.1.2XML技術(shù) 在使用本地網(wǎng)絡(luò)和互聯(lián)網(wǎng)的情況下,在不同應(yīng)用軟件之間散步數(shù)據(jù)的時(shí)候,可擴(kuò)展標(biāo)記語言(XML)是一個(gè)重要的標(biāo)準(zhǔn)。SQL Server2008將會(huì)自身支持存儲(chǔ)和查詢可擴(kuò)展標(biāo)記語言文件。 3.1.3ADO.NET2.0版本 從對(duì)SQL類的新的支持,到多活動(dòng)結(jié)果集(MARS),SQL Server2008中的ADO.NET將推動(dòng)數(shù)據(jù)集的存取和操縱,實(shí)現(xiàn)更大的可升級(jí)性和靈活性。 3.1.4增強(qiáng)的安全性 SQL Server 2008中的新安全模式將用戶和對(duì)象分開,提供fine-grainaccess存取、并允許對(duì)數(shù)據(jù)存取進(jìn)行更大的控制。另外,所有系統(tǒng)表格將作為視圖得到實(shí)施,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)象進(jìn)行了更大程度的控制。 3.1.5Transact-SQL的增強(qiáng)性能 SQL Server 2008為開發(fā)可升級(jí)的數(shù)據(jù)庫(kù)應(yīng)用軟件,提供了新的語言功能。這些增強(qiáng)的性能包括處理錯(cuò)誤、遞歸查詢功能、關(guān)系運(yùn)算符PIVOT,APPLY,ROW_NUMBER和其他數(shù)據(jù)列排行功能,等等。 3.1.6SQL服務(wù)中介 SQL服務(wù)中介將為大型、營(yíng)業(yè)范圍內(nèi)的應(yīng)用軟件,提供一個(gè)分布式的、異步應(yīng)用框架。 3.1.7通告服務(wù) 通告服務(wù)使得業(yè)務(wù)可以建立豐富的通知應(yīng)用軟件,向任何設(shè)備,提供個(gè)人化的和及時(shí)的信息,例如股市警報(bào)、新聞?dòng)嗛?、包裹遞送警報(bào)、航空公司票價(jià)等。在SQL Server 2008中,通告服務(wù)和其他技術(shù)更加緊密地融合在了一起,這些技術(shù)包括分析服務(wù)、SQL Server Management Studio。 3.1.8Web服務(wù) 使用SQL Server 2008,開發(fā)人員將能夠在數(shù)據(jù)庫(kù)層開發(fā)Web服務(wù),將SQL Server當(dāng)作一個(gè)超文本傳輸協(xié)議(HTTP)偵聽器,并且為網(wǎng)絡(luò)服務(wù)中心應(yīng)用軟件提供一個(gè)新型的數(shù)據(jù)存取功能。 3.1.9報(bào)表服務(wù) 利用SQL Server 2008,報(bào)表服務(wù)可以提供報(bào)表控制,可以通過Visual Studio 2005發(fā)行。 3.1.10全文搜索功能的增強(qiáng) SQL Server2008將支持豐富的全文應(yīng)用軟件。服務(wù)器的編目功能將得到增強(qiáng),對(duì)編目的對(duì)象提供更大的靈活性。查詢性能和可升級(jí)性將大幅得到改進(jìn),同時(shí)新的管理工具將為有關(guān)全文功能的運(yùn)行,提供更深入的了解。 3.2C#與ADO.NET 3.2.1 C#中的數(shù)據(jù)庫(kù)訪問 用.NET框架編寫的(當(dāng)然也包括用C#編寫的應(yīng)用程序)應(yīng)用程序需要訪問數(shù)據(jù)庫(kù)時(shí),將使用ADO.NET來實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問。數(shù)據(jù)綁定是一種非常有用的訪問數(shù)據(jù)庫(kù)的方法,能夠減少需要編寫的代碼量。很多簡(jiǎn)單任務(wù)可以通過純粹聲明式代碼來完成。 <1> ADO.NET ADO.NET是微軟的數(shù)據(jù)訪問框架的最新產(chǎn)物,它是.NET框架的一部分。在ADO.NET之前,程序員在ASP(Active Server Pages)或Visual Basic中使用ADO(AtiveX Data Objects),這是一組COM(Component Object Model,組件對(duì)象模型)組件,它通過一個(gè)易于使用的封裝類提供對(duì)底層數(shù)據(jù)訪問代碼的訪問。雖然ADO大大簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問,但更高級(jí)的程序員(特別是C++程序員)通常更喜歡使用更直接、更快的代碼,如OLE DB(Object Linking and Embedding for Databases)代碼庫(kù)。 ADO.NET比ADO的功能更強(qiáng)大。它是在.NET代碼中訪問數(shù)據(jù)庫(kù)的最好工具。 .NET框架中的ADO.NET類型(在System.Data命名空間及其子空間下的所有類型)包括那些為訪問SQL Server、OLE DB、ODBC和Oracle數(shù)據(jù)庫(kù)而優(yōu)化的類型。它們都是基于通用類的,因此使用ADO.NET訪問不同的DBMS是相似的。 ADO.NET類型實(shí)現(xiàn)兩個(gè)主要的功能。 ● 數(shù)據(jù)訪問:用于訪問數(shù)據(jù)庫(kù)中數(shù)據(jù)和操作數(shù)據(jù)庫(kù)的類型; ● 數(shù)據(jù)表示:用于包含數(shù)據(jù)庫(kù)數(shù)據(jù)(如數(shù)據(jù)表)的類型。 這兩種類型之間聯(lián)系密切,在數(shù)據(jù)庫(kù)開發(fā)中兩種類型都會(huì)用到。嚴(yán)格地說,可以只用一種數(shù)據(jù)庫(kù)訪問類型。然而,如果使用數(shù)據(jù)訪問類型來填充數(shù)據(jù)表示類型將節(jié)省大量工作。 ADO.NET包含7個(gè)重要的基類,其中4個(gè)是數(shù)據(jù)訪問類: ●DbConnection; ● DbCommand; ● DbDataReader; ● DbDataAdapter。 其他3個(gè)類是數(shù)據(jù)表示類: ●DataTable; ● DataRelation; ● DataSet。 DataTable類使用了其他一些重要的類:DataColum、Constraint和DataRow,本節(jié)也將介紹它們。 1.DbConnection DbConnection類提供與數(shù)據(jù)庫(kù)的連接。創(chuàng)建DbConnection對(duì)象時(shí),應(yīng)提供與DBMS通信所需的所有信息,如數(shù)據(jù)庫(kù)的位置、用于認(rèn)證的用戶名和密碼以及要訪問的DBMS中的數(shù)據(jù)庫(kù)。 所有其他ADO.NET數(shù)據(jù)訪問類都依靠DbConnection與數(shù)據(jù)庫(kù)進(jìn)行通信。DbConnection類的扮演角色如圖2.1所示。 圖3.2.1 DbConnection類 在從DbConnection派生而來的類中,到數(shù)據(jù)庫(kù)的連接都是由連接字符串定義的,該字符串存儲(chǔ)在屬性DbConnection.ConnectionString中。 數(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)閉它們使用的連接。 DbConnection對(duì)象還能參與事務(wù)??捎肈bConnection.BeginTransaction()方法開始事務(wù),或使用DbConnection.EnlistTransaction()作為已有事務(wù)的一部分執(zhí)行操作。 訪問SQL Server或SQL Server速成版中的數(shù)據(jù)時(shí),使用SqlConnection,該類是DbConnection的子類。一般來說,DbConnection和SqlConnection及其他子類都稱為連接類。 2.DbCommand DbCommand類提供與數(shù)據(jù)庫(kù)交互的主要方法。可以用DbCommand對(duì)象來執(zhí)行SQL語句、運(yùn)行存儲(chǔ)過程等。DbCommand及其派生類稱為命令類。 大部分時(shí)候并不直接使用DbCommand,而是用封裝了DbCommand的其他對(duì)象。但有時(shí)候需要對(duì)數(shù)據(jù)庫(kù)通信進(jìn)行更多的控制,這時(shí)就可以使用DbCommand對(duì)象。 DbCommand對(duì)象的扮演角色如圖2.2所示。 圖3.2.2 DbCommand類 DbCommand中最重要的屬性是DbCommand.CommandText。要執(zhí)行SQL語句,就要將語句文本放在這個(gè)屬性中??梢杂肈bCommand.CommandType來指定要執(zhí)行的語句類型,使用DbCommand.Connection和DbCommand.Tranction來訪問底層的連接或事務(wù)。 要注意,DbCommand對(duì)象可能有參數(shù)化的命令字符串,命令中的參數(shù)來自類型為DbCommand. Parameters集合的屬性。這與直接在命令字符串中輸入?yún)?shù)相比有很多優(yōu)點(diǎn),在本書后面部分將會(huì)看到。 要使用DbCommand對(duì)象執(zhí)行命令,有三種選擇,這取決于要執(zhí)行的命令是什么。有些命令不返回結(jié)果,這種情況下可以用DbCommand.ExecuteNonQuery()方法;有些命令返回一個(gè)結(jié)果,這時(shí)可用DbCommand.ExecuteScalar()方法;最后,有很多命令返回多行數(shù)據(jù),這時(shí)可用DbCommand. ExecuteReader()方法,它將返回一個(gè)DbDataReader對(duì)象(下一小節(jié)將解釋)。 SQL Server的DbCommand版本名為SqlCommand。它有自己的一些特殊方法,如SqlCommand. ExecuteXmlReader()方法,它直接以XML格式返回結(jié)果。 3.DbDataReader 使用DbDataReader類可以從結(jié)果集中讀取數(shù)據(jù),如從執(zhí)行存儲(chǔ)在命令對(duì)象中的命令生成的結(jié)果集中讀取數(shù)據(jù)。該類經(jīng)過高度優(yōu)化,可以很快地訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)。然而,這種優(yōu)化也有些副作用,例如,只能以串行方式一次讀取一行數(shù)據(jù)。不能讀完兩行后再返回去讀取第一行。通常,可以用DbDataReader對(duì)象(更確切地說,是數(shù)據(jù)閱讀器的子類對(duì)象)來提取要使用的行數(shù)據(jù),并將其存儲(chǔ)在其他對(duì)象中。例如,可以讀取一個(gè)結(jié)果集中的每行,將其存儲(chǔ)到在自定義集合或泛型列表對(duì)象中的自定義類中。 與命令對(duì)象一樣,很多時(shí)候數(shù)據(jù)閱讀器對(duì)象是由ADO.NET命名空間下的其他類使用的,用戶不必直接使用它們。 圖3.2.3說明了如何在數(shù)據(jù)庫(kù)應(yīng)用程序中使用數(shù)據(jù)閱讀器。 要使用數(shù)據(jù)閱讀器對(duì)象,首先必須調(diào)用DbDataReader.Read()方法選擇結(jié)果集中的第一行。可不斷調(diào)用該方法來移動(dòng)數(shù)據(jù)閱讀器,使數(shù)據(jù)閱讀器像結(jié)果集中的游標(biāo)一樣總是指向一行。獲取一行時(shí),Read()方法返回true;否則返回false—如當(dāng)所有行都已經(jīng)讀完時(shí)。也可以用DbDataReader. HasRows屬性來判斷結(jié)果集中是否還有其他行。 圖3.2.4 DbDataReader類 很多屬性和方法可用于檢查當(dāng)前選中的行。DbDataReader.FieldCount查看當(dāng)前行包含多少列,并用DbDataReader的重載索引器訪問各列。如果知道要訪問的列名,可用基于字符串的索引器來獲得列值,也可以使用基于整數(shù)的索引器通過位置獲得列。在這兩種情況下,這種方法都將返回object值,可將其轉(zhuǎn)化為其他類型的數(shù)據(jù)。 也可以使用DbDataReader提供的多個(gè)方法直接獲得類型化數(shù)據(jù),如GetString()和GetInt32()分別將指定列以string和int值返回,列通過其索引選擇。要使用這些方法獲得值類型,必須首先使用DbDataReader.IsDBNull檢查空值;否則,空值將引發(fā)異常。檢查空值是必須的,因?yàn)椴还苁裁磾?shù)據(jù)庫(kù)類型都可以為空。這與.NET中的值類型不同,可為空的值類型(如int)在這種上下文環(huán)境中是不受支持的。 DbDataReader也能夠獲得關(guān)于它包含的數(shù)據(jù)的元信息—使用DbDataReader.GetSchema Table()方法,這樣就可以知道列的名稱、數(shù)據(jù)類型和其他信息,如列是否包含空值。 與前面的其他類一樣,也有專門用于SQL Server的數(shù)據(jù)閱讀器類,這就是SqlDataReader,本書將使用該類。該類繼承DbDataReader,提供將數(shù)據(jù)讀取為本地SQL類型的方法,這樣就能夠避免空類型的問題。這些類型包含在System.Data.Sqltypes命名空間中,是可為空的;如SqlDouble和SqlInt32。雖然這些類型也可以像標(biāo)準(zhǔn)的值類型那樣進(jìn)行操作,但它們實(shí)際上是引用類型。 4.DbDataAdapter 在ADO.NET的核心數(shù)據(jù)訪問類中,最后一個(gè)是DbDataAdapter類。它比前面介紹過的類型要復(fù)雜得多,設(shè)計(jì)該類的目的只有一個(gè):減少存儲(chǔ)在數(shù)據(jù)集對(duì)象中的數(shù)據(jù)與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換時(shí)的干擾。與前面的類一樣,DbDataAdapter類也有很多派生類,它們統(tǒng)稱為數(shù)據(jù)適配器類。 稍后將詳細(xì)解釋什么是數(shù)據(jù)集對(duì)象,簡(jiǎn)單地說,它們是能夠以.NET對(duì)象的形來表示數(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ù)中。 這個(gè)功能由命令對(duì)象和數(shù)據(jù)閱讀器對(duì)象執(zhí)行,因此大部分時(shí)候用戶不必考慮它。然而,DbDataAdapter最重要的(也是最有用的)特性之一是,它用于傳輸數(shù)據(jù)的命令對(duì)象被暴露出來,因此可以根據(jù)需要對(duì)它們進(jìn)行定制。 圖2.4說明了DbDataAdapter類的工作原理,包括它包含的命令對(duì)象。 圖3.2.4 DbDataAdapter類 數(shù)據(jù)適配器使用的4個(gè)命令對(duì)象存儲(chǔ)在4個(gè)屬性中:SelectCommand(用于查詢數(shù)據(jù))、InsertCommand(用于添加數(shù)據(jù))、UpdateCommand(用于編輯數(shù)據(jù))和DeleteCommand(用于刪除數(shù)據(jù))。要使用適配器,并不一定全部用到這4個(gè)屬性,例如,可以只用適配器來查詢數(shù)據(jù)。另外,.NET框架可以根據(jù)其他命令的值推斷出命令的值,例如,可以根據(jù)查詢命令來生成更新、插入和刪除命令。然而,這種自動(dòng)生成的命令的效率可能不如手工提供的高。本書稍后還會(huì)討論這個(gè)問題。 數(shù)據(jù)適配器中最常用的兩個(gè)方法是DbDataAdapter.Fill()和DbDataAdapter.Update()。Fill()方法從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù);Update()方法更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。這兩個(gè)方法都可以用于數(shù)據(jù)集或單個(gè)數(shù)據(jù)表。另外,可以使用DbDataAdapter.FillSchema()獲取架構(gòu)數(shù)據(jù)。 SQL Server中的DbDataAdapter版本是Sql DbDataAdapter。 5.DataTable DataTable是ADO.NET提供的第一個(gè)數(shù)據(jù)表示類。與數(shù)據(jù)訪問類不同,數(shù)據(jù)表示類沒有專門用于特定數(shù)據(jù)庫(kù)管理系統(tǒng)(如SQL Server)的子類,它們獨(dú)立于平臺(tái)。實(shí)際上,如果需要的話,數(shù)據(jù)表示類完全可以獨(dú)立于數(shù)據(jù)庫(kù)使用,它們只是存儲(chǔ)數(shù)據(jù)的一種方便的方法。 DataTable類用于存儲(chǔ)(讀者可能對(duì)此感到不解)數(shù)據(jù)表。在繼續(xù)討論這個(gè)類之前需要澄清一件事情:以DataTable對(duì)象存儲(chǔ)的表不一定要映射到數(shù)據(jù)庫(kù)中的表。DataTable可能包含表中數(shù)據(jù)的一個(gè)子集,該子集可能只包含數(shù)據(jù)庫(kù)表的部分行、部分列,可能是由數(shù)據(jù)庫(kù)中多個(gè)表組合而成的數(shù)據(jù),還可能是所有這些的組合,這取決于用于獲得數(shù)據(jù)的查詢語句。通常,DataTable與數(shù)據(jù)庫(kù)中的表匹配,但仍然要知道上面提到的事實(shí)。 圖3.2.5說明了DataTable與其他ADO.NET對(duì)象之間的關(guān)系。 圖2.5 DataTable 要獲得完全填充的DataTable,可使用數(shù)據(jù)適配器。有包含數(shù)據(jù)的DataTable后,就可以訪問行、列、約束和它包含的其他信息。這些信息可以通過命名恰切的屬性來訪問,包括Rows、Columns和Contraints等。 上面提到的3個(gè)屬性都返回一個(gè)集合類(DataRowCollection、DataColumnCollection和ConstaintCollection)對(duì)象。與其他集合類一樣,這些類可用于在它們包含的對(duì)象集合中導(dǎo)航,添加或刪除項(xiàng)等。稍后將介紹這些集合包含的類。 DataTable類另一個(gè)非常重要的方面是,如何處理數(shù)據(jù)修改。例如,如果刪除DataTable中的一行,數(shù)據(jù)適配器如何知道在數(shù)據(jù)庫(kù)中刪除對(duì)應(yīng)的數(shù)據(jù)?DataTable對(duì)象記錄了對(duì)原始數(shù)據(jù)的修改,而不只是數(shù)據(jù)的當(dāng)前狀態(tài)。從DataTable中刪除一行并不會(huì)真的刪除這些數(shù)據(jù),而只是數(shù)據(jù)被標(biāo)記為已刪除。在DataTable對(duì)象的消費(fèi)方(如應(yīng)用程序)看來,就像數(shù)據(jù)已被刪除,但實(shí)際上并沒有刪除。 任何時(shí)候都可以使用GetChanges()方法獲得關(guān)于對(duì)DataTable對(duì)象所做的修改列表(以另一個(gè)DataTable對(duì)象的形式)??梢栽谶m當(dāng)時(shí)使用AcceptChanges()方法接受已做的修改,從而覆蓋原來的數(shù)據(jù)。例如,可以在修改提交到數(shù)據(jù)庫(kù)后這樣做。也可以使用RejectChanges()撤銷所有的修改,如當(dāng)最終用戶單擊“取消”按鈕時(shí)。 DataTable對(duì)象也暴露了很多事件,在應(yīng)用程序中可以定制這些事件,如RowDeleted和ColumnChanged。使用這些事件可以保證應(yīng)用程序?qū)κ录M(jìn)行響應(yīng),還可以實(shí)現(xiàn)其他功能,例如,確保底層數(shù)據(jù)庫(kù)在數(shù)據(jù)發(fā)生修改時(shí)立即更新。 (1)DataColumn。 DataColumn存儲(chǔ)了在數(shù)據(jù)表中定義列所需的所有信息。在DataTable中,Columns屬性包含一個(gè)DataColumnCollection,這是一個(gè)DataColumn對(duì)象集合。 DataColumn還包含與DBMD匹配的屬性,包括ColumnName、Dataype、AllowDBNull和DefaultValue。它的屬性可能比使用的DBMS的屬性還要多,但如果使用過不同的DBMS,這一點(diǎn)將顯而易見。對(duì)于SQL Server,這并不是問題。 (2)Constaint。 Constaint對(duì)象(在ConstaintCollection中,可通過DataTable.Constaints訪問)用于包含表的所有元數(shù)據(jù),這些數(shù)據(jù)不包含在DataColumn對(duì)象中。Constaint類作為更具體類的基類,這些具體類包括UniqueConstaint—用于確保給定列或列組合的值是唯一的(例如,這對(duì)于主鍵是必須的)和ForeingKeyConstaint—用于實(shí)現(xiàn)表之間的關(guān)系。 (3)DataRow。 DataRow類用于存儲(chǔ)表中一行包含的數(shù)據(jù)。通過DataTable.Rows屬性可以訪問DataRow Collection對(duì)象,后者存儲(chǔ)了組成表數(shù)據(jù)的多個(gè)DataRow對(duì)象。一行數(shù)據(jù)中的各列可通過索引器來訪問,索引器讓你能夠通過列名、索引和版本(例如,如果行被修改)來訪問列。 行的當(dāng)前狀態(tài),即它是否被修改、刪除或以某種方式改變,可通過DataRowState屬性訪問。該屬性的值為DataRowState類型,這是一種包含所有可能行狀態(tài)的枚舉類型。各個(gè)DataRow對(duì)象也有與DataTable對(duì)應(yīng)的方法,用于接受、拒絕和獲得更改。例如,可以推斷出,調(diào)用DataTable. AcceptChanges()將級(jí)聯(lián)地對(duì)表的每行調(diào)用DataRow AcceptChanges()。 6.DataRelation 在處理多個(gè)DataTable對(duì)象時(shí),通常需要表示(并實(shí)施)表數(shù)據(jù)之間的關(guān)系。這由DataRelation類來完成??蓪⒍鄠€(gè)DataRelation對(duì)象組合起來,構(gòu)成一個(gè)DataRelationCollection對(duì)象。 關(guān)系可以用DataRelation類的多個(gè)屬性來定義,包括ChildTable、ChildColumns、ChildKeyConstraint、ParentTable和ParentKeyConstraint等。這些屬性都是對(duì)相應(yīng)的對(duì)象的引用,如DataTable和DataColumn對(duì)象。關(guān)系名也被存儲(chǔ)在DataRelation.RelationName屬性中。 現(xiàn)在還不用太擔(dān)心DataRelation對(duì)象,因?yàn)樗鼈兎庋b了ADO.NET比較高級(jí)的方面,這在本書后面將介紹。 7.DataSet 現(xiàn)在到了ADO.NET中最重要的類—DataSet。從某種程度上說,該類只是DataTable對(duì)象和DataRelation對(duì)象的集合(如圖2.6所示)。然而,DataSet的強(qiáng)大功能體現(xiàn)在與其他對(duì)象結(jié)合使用,包括用于Web應(yīng)用程序和Windows應(yīng)用程序的控件、Web服務(wù)和XML文檔。 DataSet類包含很多屬性和方法;其中很多與其組成部分的屬性和方法類似,例如,GetChanges()和RejectChanges()。還有一些重要的屬性,如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)系,則添加一行到其中一個(gè)表中,可能要求另一個(gè)表中存在一行。而這行可能不存在(例如,如果兩行同時(shí)添加時(shí)),這時(shí),為避免錯(cuò)誤,添加這些行的順序?qū)⒑苤匾?;必須先添加位于關(guān)系“一”端的行。也可以將DataSet.Enforce Constraints屬性設(shè)置為false,這樣在執(zhí)行編輯操作時(shí)將忽略關(guān)系。 (1)DataSet對(duì)象和XML之間的關(guān)系。 與ADO.NET的其他對(duì)象一樣,設(shè)計(jì)DataSet對(duì)象時(shí)也考慮了XML數(shù)據(jù)。使用DataSet. GetXml()方法,可將數(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接口。 DataSet對(duì)象與XML之間的關(guān)系以及使用序列化在這兩種表示格式之間進(jìn)行轉(zhuǎn)換,在.NET框架中運(yùn)用相當(dāng)廣泛。它提供了一種在應(yīng)用程序?qū)又g和通過Internet交換數(shù)據(jù)的很好方法。特別地,有了數(shù)據(jù)集的XML表示形式后,就可以在Web服務(wù)之間進(jìn)行交換DataSet對(duì)象。 (2)類型化數(shù)據(jù)集(typed data set)。 DataSet對(duì)象的功能很強(qiáng)大,但它們并不是最容易使用或最合乎邏輯的。例如,要訪問表中的特定行,使用它就顯得很笨拙。必須使用DataSet.Tables集合獲得正確的表,用DataTable.Rows集合獲得正確的行,然后以對(duì)象引用的形式或通過DataColumn的方法提取列數(shù)據(jù)—這些都不容易。訪問特定列的代碼行可能如下所示: int result = (int)myDataSet.Tables["myTable"].Rows[5][ "IntegerColumn"]; 還有一種方法,那就是使用類型化數(shù)據(jù)集。類型化數(shù)據(jù)集是DataSet的子類,但它包含強(qiáng)類型屬性和方法,使得數(shù)據(jù)操作更容易。如果使用類型化數(shù)據(jù)集,上面的代碼就可以簡(jiǎn)化為如下所示: int result = myTypedDataSet.MyTable[5].IntegerColumn; 雖然這并不影響代碼的功能,但輸入更容易(尤其是啟用了智能感知功能時(shí)),以后閱讀代碼時(shí)也更容易理解。 唯一的限制是,需要在設(shè)計(jì)時(shí)就知道數(shù)據(jù)集中將包含的數(shù)據(jù)的結(jié)構(gòu)。然而,因?yàn)閿?shù)據(jù)庫(kù)的結(jié)構(gòu)不大可能有很大的改變,因此這通常不成問題。 可以使用xsd.exe工具或通過Visual C#速成版界面自動(dòng)創(chuàng)建類型化數(shù)據(jù)集。xsd.exe工具要求提供一個(gè)架構(gòu)(schema),這是以擴(kuò)展名為.xsd的XML架構(gòu)文件提供的。Visual C#速成版在創(chuàng)建類型化數(shù)據(jù)集時(shí)也要使用架構(gòu)信息,但它直接從數(shù)據(jù)庫(kù)獲取這些信息,這使得對(duì)數(shù)據(jù)集的結(jié)構(gòu)進(jìn)行操作更容易。 (3)性能。 有些人認(rèn)為應(yīng)盡量避免使用數(shù)據(jù)集。這是因?yàn)樗鼈兪恰爸亓考?jí)”對(duì)象,帶來的開銷在高性能應(yīng)用程序中可能很大。另外,以數(shù)據(jù)集的形式通過Web傳輸數(shù)據(jù)可能意味著要傳輸大量的XML數(shù)據(jù)。 從某種程度上說,這些擔(dān)憂是正確的。如果性能很重要,可以設(shè)計(jì)自己的類,并直接使用數(shù)據(jù)閱讀器提供的數(shù)據(jù)進(jìn)行填充。然而,數(shù)據(jù)集(特別是類型化數(shù)據(jù)集)自有它們的用處。它們提供了很多特性,只需少量代碼就可以使用這些特性,且用于操作它們的代碼通常很簡(jiǎn)單。例如,如果不沒有數(shù)據(jù)集,要表示數(shù)據(jù)庫(kù)的數(shù)據(jù),同時(shí)在類中記錄所有編輯,且這些編輯可以很容易地傳輸?shù)綌?shù)據(jù)庫(kù),可能需要大量的代碼,且實(shí)現(xiàn)起來相當(dāng)困難。 3.2.2 數(shù)據(jù)綁定 數(shù)據(jù)綁定是程序員只需做少量工作就可以用數(shù)據(jù)庫(kù)中的數(shù)據(jù)填充Windows或Web控件的一種技術(shù)。.NET框架讓程序員只需使用簡(jiǎn)單的代碼就可以將數(shù)據(jù)源與控件關(guān)聯(lián)起來,實(shí)際上,可以通過GUI實(shí)現(xiàn)很多功能,而不需要編寫大量C#代碼。 數(shù)據(jù)綁定有兩點(diǎn)要求:數(shù)據(jù)源和要綁定數(shù)據(jù)的控件。數(shù)據(jù)源包括數(shù)據(jù)庫(kù)連接,但不僅限于此,也可以使用對(duì)象或來自Web服務(wù)的數(shù)據(jù)作為數(shù)據(jù)源。使用對(duì)象作為數(shù)據(jù)源是一種功能強(qiáng)大的方法,可以利用自定義的集合和自己設(shè)計(jì)的類,但這有點(diǎn)偏題了。本書大部分時(shí)候使用的數(shù)據(jù)源類型都是數(shù)據(jù)庫(kù)數(shù)據(jù)源,它有Web控件形式。 生成數(shù)據(jù)庫(kù)數(shù)據(jù)源時(shí),通常不僅需要配置連接。數(shù)據(jù)庫(kù)數(shù)據(jù)源包括關(guān)于要訪問數(shù)據(jù)庫(kù)中哪些對(duì)象的信息。實(shí)際上,在幕后通常將生成類型化數(shù)據(jù)集。此外,幕后還將用到前面介紹的ADO.NET對(duì)象(連接、命令、數(shù)據(jù)閱讀器和數(shù)據(jù)適配器協(xié)同工作來創(chuàng)建數(shù)據(jù)源)。然而,程序員不必太擔(dān)心這一點(diǎn),而只需創(chuàng)建一個(gè)數(shù)據(jù)源并將它綁定到控件,如圖2.7所示。 圖2.7 數(shù)據(jù)綁定 要綁定到控件,需要將控件的屬性設(shè)置為數(shù)據(jù)源的元素(從而間接地設(shè)置為數(shù)據(jù)庫(kù)的元素)。對(duì)于簡(jiǎn)單控件,如標(biāo)簽或文本框,只要將控件的Text屬性設(shè)置為數(shù)據(jù)庫(kù)中類型為文本的列。還可以將數(shù)據(jù)綁定到列表控件(包括下拉列表),這樣列表中的每項(xiàng)都綁定到數(shù)據(jù)庫(kù)表中的一行。更高級(jí)的控件(如GridView、Repeater)可用于查看整個(gè)表的內(nèi)容。另外,也可以提供自定義的控件和自定義的數(shù)據(jù)綁定架構(gòu),以便使用和編輯數(shù)據(jù)庫(kù)中的數(shù)據(jù)。 3.3 SQL語言 通用的SQL語言,最早于1974年提出,當(dāng)時(shí)稱為SEQUEL語言,后來被國(guó)際標(biāo)準(zhǔn)化組織ISO采納為國(guó)際標(biāo)準(zhǔn),現(xiàn)在大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL語言。 SQL是一種處理數(shù)據(jù)的高級(jí)語言,是非過程化語言,在查詢數(shù)據(jù)時(shí),只需指出“要什么”,而不需指出如何實(shí)現(xiàn)的過程。SQL語言包括數(shù)據(jù)定義、查詢、操縱和控制功能。SQL語言的語法格式簡(jiǎn)單,使用方便靈活。 3.3.1數(shù)據(jù)定義語句 廣義上講,表定義語句包括數(shù)據(jù)表的創(chuàng)建語句(Create語句)、數(shù)據(jù)表修改語句(Alter語句)和數(shù)據(jù)表刪除語句(Drop語句)。 3.3.2視圖定義語句 視圖是對(duì)數(shù)據(jù)表中數(shù)據(jù)的一種顯示方式,用一個(gè)數(shù)據(jù)表可以有多個(gè)視圖,以根據(jù)用戶的不同需求,將數(shù)據(jù)表中用戶所關(guān)心的數(shù)據(jù)提取出來,顯示給用戶,忽略數(shù)據(jù)表中其他數(shù)據(jù)。視圖也可以理解為一種預(yù)先定義好的查詢。實(shí)際上,查詢的優(yōu)點(diǎn)在于可在多個(gè)數(shù)據(jù)表之間按指定的條件對(duì)數(shù)據(jù)進(jìn)行篩選顯示。 3.3.3索引定義語句 索引是加速數(shù)據(jù)查詢的重要手段- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
30 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 人事管理系統(tǒng) 畢業(yè)論文 19467
鏈接地址:http://m.appdesigncorp.com/p-13132512.html