數(shù)據(jù)庫(kù)SQL ServeSQLite教程 課件 第9章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第1頁(yè)
數(shù)據(jù)庫(kù)SQL ServeSQLite教程 課件 第9章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第2頁(yè)
數(shù)據(jù)庫(kù)SQL ServeSQLite教程 課件 第9章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第3頁(yè)
數(shù)據(jù)庫(kù)SQL ServeSQLite教程 課件 第9章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第4頁(yè)
數(shù)據(jù)庫(kù)SQL ServeSQLite教程 課件 第9章 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)SQLServer/SQlite教程授課教師:第9章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)把基于數(shù)據(jù)庫(kù)的應(yīng)用程序(或應(yīng)用軟件)稱為數(shù)據(jù)庫(kù)應(yīng)用。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)本質(zhì)上也是軟件,因此它的開(kāi)發(fā)過(guò)程與一般的軟件開(kāi)發(fā)相似。數(shù)據(jù)庫(kù)本身并不能建立應(yīng)用程序,只能完成后臺(tái)數(shù)據(jù)的存儲(chǔ)與管理,因此必須和前端的應(yīng)用程序結(jié)合起來(lái)才能執(zhí)行業(yè)務(wù)處理功能。與其他應(yīng)用系統(tǒng)相比,數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)引入了數(shù)據(jù)庫(kù)的訪問(wèn)操作,因此在設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中必須掌握數(shù)據(jù)庫(kù)訪問(wèn)的相關(guān)技巧。本章的重點(diǎn)是介紹關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程、數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)訪問(wèn)架構(gòu)及編程方法。第9章

數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)9.1關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)目錄9.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)過(guò)程9.3數(shù)據(jù)庫(kù)訪問(wèn)架構(gòu)設(shè)計(jì)9.1關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)(DatabaseDesign)是指對(duì)于一個(gè)設(shè)定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),使之能夠有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶的應(yīng)用需求。它是規(guī)劃和結(jié)構(gòu)化數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象以及這些數(shù)據(jù)對(duì)象之間關(guān)系的過(guò)程。數(shù)據(jù)庫(kù)設(shè)計(jì)是根據(jù)用戶的需求來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)和建立數(shù)據(jù)庫(kù)的過(guò)程,是管理信息系統(tǒng)開(kāi)發(fā)和建設(shè)的核心技術(shù)。在開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)時(shí),需要用到軟件工程的原理和方法。9.1.1關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的概念按照規(guī)范設(shè)計(jì)的方法,結(jié)合軟件工程的思想,可將數(shù)據(jù)庫(kù)設(shè)計(jì)分為6個(gè)階段:需求分析階段、概念結(jié)構(gòu)設(shè)計(jì)階段、邏輯設(shè)計(jì)階段、物理設(shè)計(jì)階段、數(shù)據(jù)庫(kù)實(shí)施階段、數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)階段。1.需求分析2.概念設(shè)計(jì)3.邏輯設(shè)計(jì)4.物理設(shè)計(jì)5.數(shù)據(jù)庫(kù)實(shí)施6.數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程需求分析就是了解用戶的需求。通過(guò)調(diào)查和分析用戶的業(yè)務(wù)活動(dòng)和數(shù)據(jù)的使用情況,弄清所用數(shù)據(jù)的種類、范圍、數(shù)量及它們?cè)跇I(yè)務(wù)活動(dòng)中的情況,確定用戶的使用要求和約束條件等,形成文本資料,在此基礎(chǔ)上確定系統(tǒng)的功能及其擴(kuò)展。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程1.需求分析用戶需求調(diào)查分析的方法有多種,通常主要方法有自頂向下和自底向上兩種。文本資料主要是數(shù)據(jù)流圖和數(shù)據(jù)字典。其中數(shù)據(jù)流圖就是采用結(jié)構(gòu)化分析方法,以圖形方式來(lái)表達(dá)系統(tǒng)功能、數(shù)據(jù)流向及其變換過(guò)程。數(shù)據(jù)字典是對(duì)系統(tǒng)中數(shù)據(jù)的詳細(xì)描述,是各類數(shù)據(jù)結(jié)構(gòu)和屬性的清單。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程1.需求分析2.概念設(shè)計(jì)概念設(shè)計(jì)就是將用戶需求分析得到的用戶需求抽象為信息結(jié)構(gòu),即概念模型。最著名的概念模型就是E-R模型,概念設(shè)計(jì)的結(jié)果就是E-R圖。概念設(shè)計(jì)的步驟是先進(jìn)行數(shù)據(jù)抽象,設(shè)計(jì)底層子系統(tǒng)E-R模型。其次是集成各底層子系統(tǒng)E-R模型,最終形成全局E-R模型。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程邏輯設(shè)計(jì)的任務(wù)就是把概念設(shè)計(jì)的成果E-R圖轉(zhuǎn)換為DBMS支持的邏輯結(jié)構(gòu)。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程3.邏輯設(shè)計(jì)4.物理設(shè)計(jì)物理設(shè)計(jì)的任務(wù)是為了有效地實(shí)現(xiàn)邏輯模式,確定所采取的存儲(chǔ)策略,其內(nèi)容包括關(guān)系模型的存取方法、數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)、參數(shù)配置等。5.數(shù)據(jù)庫(kù)實(shí)施數(shù)據(jù)庫(kù)實(shí)施就是在計(jì)算機(jī)上建立起符合需求的數(shù)據(jù)庫(kù)結(jié)構(gòu)、填入數(shù)據(jù)、測(cè)試和試運(yùn)行的過(guò)程。6.數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)數(shù)據(jù)庫(kù)試運(yùn)行通過(guò)后,數(shù)據(jù)庫(kù)開(kāi)發(fā)工作就基本結(jié)束,進(jìn)入正式運(yùn)行階段。對(duì)數(shù)據(jù)庫(kù)的經(jīng)常性維護(hù)工作主要由DBA完成,包括安全性與完整性控制、性能監(jiān)測(cè)與改善、數(shù)據(jù)備份與管理等工作。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程9.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)過(guò)程應(yīng)用軟件(ApplicationSoftware)是和系統(tǒng)軟件相對(duì)應(yīng)的,是使用各種程序設(shè)計(jì)語(yǔ)言編制的應(yīng)用程序的集合。隨著面向?qū)ο蠹夹g(shù)的應(yīng)用,軟件架構(gòu)也進(jìn)入了大家的視野。通常,小規(guī)模網(wǎng)站的Web應(yīng)用系統(tǒng)架構(gòu)將Web應(yīng)用和數(shù)據(jù)庫(kù)分開(kāi)部署,Web應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器各司其職,在系統(tǒng)訪問(wèn)量增加時(shí)可以分別升級(jí)應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。數(shù)據(jù)庫(kù)通常統(tǒng)一存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上,并且由服務(wù)器進(jìn)行統(tǒng)一管理。這里的服務(wù)器指的是DBMS。SQLServer、Oracle等都允許在一臺(tái)計(jì)算機(jī)上安裝多個(gè)DBMS,有時(shí)也用DBMS實(shí)例來(lái)指代數(shù)據(jù)庫(kù)服務(wù)器。9.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)過(guò)程計(jì)算機(jī)中的Architecture一詞,譯成中文有“架構(gòu)”“體系”之意,是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述。軟件架構(gòu)在定義上分為“組成派”和“決策派”兩大陣營(yíng)?!敖M成派”認(rèn)為軟件架構(gòu)是將系統(tǒng)描述成計(jì)算組件及組件之間的交互;“決策派”認(rèn)為軟件架構(gòu)包含了一系列的決策,主要包括軟件系統(tǒng)的組織選擇、組成系統(tǒng)的結(jié)構(gòu)元素和它們之間的接口等。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)一般指軟件體系結(jié)構(gòu)。一般地,可以將數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的所有業(yè)務(wù)功能劃分為以下三個(gè)部分:(1)操作界面服務(wù)。操作界面服務(wù)主要完成數(shù)據(jù)的輸入與顯示等業(yè)務(wù)處理,如輸入數(shù)據(jù)的正確性檢查、輸出數(shù)據(jù)的報(bào)表顯示、圖形顯示等。(2)商業(yè)服務(wù)。商業(yè)服務(wù)主要完成數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中的數(shù)據(jù)運(yùn)算以及業(yè)務(wù)規(guī)則處理,如商業(yè)規(guī)則的檢查、對(duì)輸入數(shù)據(jù)的加工處理等。(3)數(shù)據(jù)服務(wù)。數(shù)據(jù)服務(wù)主要完成數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中的數(shù)據(jù)存儲(chǔ)與管理功能,如數(shù)據(jù)的完整性檢查、安全性控制等。根據(jù)這三類功能在整個(gè)架構(gòu)中位置的不同,數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)大致可分為兩種,即客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)和瀏覽器/服務(wù)器(B/S)結(jié)構(gòu)。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)C/S結(jié)構(gòu)由客戶端和服務(wù)器構(gòu)成,其中服務(wù)器指數(shù)據(jù)庫(kù)服務(wù)器,客戶端指完成前端業(yè)務(wù)處理的應(yīng)用程序。在C/S結(jié)構(gòu)中,客戶端可以根據(jù)業(yè)務(wù)處理的要求實(shí)時(shí)地訪問(wèn)后臺(tái)的數(shù)據(jù)庫(kù)服務(wù)器,從而提供對(duì)前臺(tái)數(shù)據(jù)的增加、刪除、修改、查詢等服務(wù)。C/S結(jié)構(gòu)又有許多變種,在實(shí)際開(kāi)發(fā)中常用的結(jié)構(gòu)主要有以前端為主的C/S結(jié)構(gòu)和以后端為主的C/S結(jié)構(gòu)。以前端為主的C/S結(jié)構(gòu)是指在應(yīng)用系統(tǒng)的三類服務(wù)中,操作界面服務(wù)和商業(yè)服務(wù)都在客戶端完成,而服務(wù)器僅提供數(shù)據(jù)服務(wù)。在圖9-1給出了以前端為主的C/S結(jié)構(gòu)示意圖。在這種結(jié)構(gòu)中,客戶端負(fù)擔(dān)重,服務(wù)器負(fù)擔(dān)輕,所以也稱為“胖客戶機(jī)/瘦服務(wù)器結(jié)構(gòu)”。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)1.C/S結(jié)構(gòu)圖9-1所示的架構(gòu)是企業(yè)管理信息系統(tǒng)中最常見(jiàn)的體系結(jié)構(gòu)。比較常用的一些程序設(shè)計(jì)工具,如Delphi、C++、VB等都可以用來(lái)開(kāi)發(fā)這種結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)1.C/S結(jié)構(gòu)圖9-1以前端為主的C/S結(jié)構(gòu)以后端為主的C/S結(jié)構(gòu)是在以前端為主的結(jié)構(gòu)基礎(chǔ)上提出來(lái)的,可以看成是對(duì)以前端為主的C/S結(jié)構(gòu)的一種改進(jìn)。圖9-2給出了以后端為主的C/S結(jié)構(gòu)示意圖。從圖中可以看到,在以后端為主的C/S結(jié)構(gòu)中,商業(yè)服務(wù)從客戶端遷移到了服務(wù)器,因此數(shù)據(jù)庫(kù)服務(wù)器不僅承擔(dān)了數(shù)據(jù)服務(wù),還承擔(dān)了商業(yè)服務(wù)。這種結(jié)構(gòu)減輕了客戶端的計(jì)算機(jī)負(fù)擔(dān),加大了服務(wù)器的處理業(yè)務(wù),因此也稱為“瘦客戶機(jī)/胖服務(wù)器結(jié)構(gòu)”。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)1.C/S結(jié)構(gòu)圖9-2以后端為主的C/S結(jié)構(gòu)一般情況下,數(shù)據(jù)庫(kù)服務(wù)器本身并不提供業(yè)務(wù)處理的能力,因此以后端為主的C/S結(jié)構(gòu)對(duì)DBMS本身有一定的要求,即要求DBMS具備基本的業(yè)務(wù)處理編程能力,只有這樣才能將商業(yè)服務(wù)遷移到服務(wù)器。在現(xiàn)在的DBMS中,這一要求主要通過(guò)過(guò)程化的SQL來(lái)實(shí)現(xiàn)。也就是說(shuō),可以將商業(yè)服務(wù)層的功能用過(guò)程化SQL實(shí)現(xiàn)成存儲(chǔ)過(guò)程,然后由客戶端調(diào)用。在實(shí)際開(kāi)發(fā)中,一般也用這種方式來(lái)建立以后端為主的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)結(jié)構(gòu)。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)1.C/S結(jié)構(gòu)在C/S結(jié)構(gòu)中,操作界面服務(wù)和商業(yè)服務(wù)通常在客戶端運(yùn)行,因此一旦系統(tǒng)需要升級(jí),就需要對(duì)所有客戶端進(jìn)行更新。在銀行、證券、郵電等分布式應(yīng)用系統(tǒng)中,這種維護(hù)性任務(wù)的工作量巨大,對(duì)系統(tǒng)的升級(jí)工作帶來(lái)了很大的困難。B/S結(jié)構(gòu)正是在這樣的背景下出現(xiàn)的。B/S結(jié)構(gòu)出現(xiàn)的基礎(chǔ)是互聯(lián)網(wǎng)和WWW服務(wù)的出現(xiàn)。WWW服務(wù)中,客戶端(即瀏覽器)提供了一個(gè)統(tǒng)一的顯示和操作界面,它可以將Web服務(wù)器上的HTML頁(yè)面動(dòng)態(tài)下載到客戶端本地運(yùn)行。這種方式最大的優(yōu)點(diǎn)是可維護(hù)性好。如果需要更新頁(yè)面,只需要在Web服務(wù)器上將頁(yè)面的內(nèi)容更新,所有的客戶端都可以自動(dòng)獲取最新的頁(yè)面。因此,B/S結(jié)構(gòu)非常適合于那些地域性分布的應(yīng)用9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)2.B/S結(jié)構(gòu)圖9-3給出了數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的B/S結(jié)構(gòu)示意圖。這種結(jié)構(gòu)包含了客戶端、Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器3層。從圖中可以看到,在B/S結(jié)構(gòu)中,客戶端只提供唯一的瀏覽顯示功能(這也可以看成是操作界面服務(wù)的一部分),商業(yè)服務(wù)和操作界面服務(wù)則通常放在Web服務(wù)器上。從數(shù)據(jù)庫(kù)服務(wù)器的角度來(lái)看,Web服務(wù)器就是它的客戶端,Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器在許多應(yīng)用中通常都是基于C/S結(jié)構(gòu)搭建的。因此,在Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器中,仍可以有多種方式來(lái)安排商業(yè)服務(wù)的位置。例如,可以將商業(yè)服務(wù)遷移到數(shù)據(jù)庫(kù)服務(wù)器上。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)2.B/S結(jié)構(gòu)B/S結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)需要用專門的Web開(kāi)發(fā)工具,如ASP/ASP.NET、C#或JSP(JavaServerPages)等。一般的Web開(kāi)發(fā)工具都提供數(shù)據(jù)庫(kù)訪問(wèn)功能,可以用來(lái)實(shí)現(xiàn)B/S結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。而傳統(tǒng)的開(kāi)發(fā)工具,如VC++、VB、PowerBuilder等,都是針對(duì)C/S結(jié)構(gòu)應(yīng)用系統(tǒng)開(kāi)發(fā)而設(shè)計(jì)的,因此不能直接用來(lái)開(kāi)發(fā)B/S結(jié)構(gòu)的應(yīng)用系統(tǒng)。C/S結(jié)構(gòu)和B/S結(jié)構(gòu)都各有優(yōu)缺點(diǎn),相應(yīng)的開(kāi)發(fā)工具也各有所長(zhǎng),應(yīng)根據(jù)應(yīng)用系統(tǒng)各自的需求來(lái)決定建立何種結(jié)構(gòu)的系統(tǒng)C/S結(jié)構(gòu)和B/S結(jié)構(gòu)后來(lái)還產(chǎn)生了許多變種,例如3層的C/S結(jié)構(gòu)、多層的B/S結(jié)構(gòu)等,也提出了C/S和B/S的混合實(shí)現(xiàn)結(jié)構(gòu)。9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)2.B/S結(jié)構(gòu)9.2.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的架構(gòu)2.B/S結(jié)構(gòu)圖9-3B/S結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程一般遵循結(jié)構(gòu)化方法即生命周期法。結(jié)構(gòu)化軟件開(kāi)發(fā)方法首先對(duì)問(wèn)題進(jìn)行全面、細(xì)致的調(diào)查,然后從功能和流程的角度來(lái)分析和優(yōu)化問(wèn)題,最后設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)。它的核心思想是結(jié)構(gòu)化的分析、設(shè)計(jì)與編程,特點(diǎn)是強(qiáng)調(diào)自頂向下設(shè)計(jì)以及流程化和文檔化。結(jié)構(gòu)化方法一般通過(guò)數(shù)據(jù)流程圖分析、模塊化技術(shù)和結(jié)構(gòu)化程序技術(shù)來(lái)實(shí)現(xiàn)。圖9-4所示為基于結(jié)構(gòu)化方法的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程。9.2.2數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)的過(guò)程9.2.2數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)的過(guò)程圖9-4結(jié)構(gòu)化方法的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程1.可行性分析2.需求分析3.設(shè)計(jì)4.編碼5.測(cè)試6.運(yùn)行維護(hù)下面簡(jiǎn)要介紹每個(gè)過(guò)程,更詳細(xì)的內(nèi)容可參考有關(guān)軟件工程的書籍。9.2.2數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)的過(guò)程分析一般要分析系統(tǒng)開(kāi)發(fā)的經(jīng)濟(jì)可行性、技術(shù)可行性及操作可行性,基本的步驟如下:(1)復(fù)查系統(tǒng)規(guī)模和目標(biāo):根據(jù)系統(tǒng)的開(kāi)發(fā)目標(biāo)訪問(wèn)關(guān)鍵人員,改正含糊的、二義的以及不正確的描述,核查系統(tǒng)限制和約束。(2)研究現(xiàn)有系統(tǒng)功能:分析現(xiàn)有系統(tǒng)的任務(wù)和功能,比較新舊系統(tǒng)。例如,新系統(tǒng)必須完成舊系統(tǒng)的基本功能、新系統(tǒng)必須改正舊系統(tǒng)存在的問(wèn)題、新系統(tǒng)比舊系統(tǒng)增收入和減支出等。(3)導(dǎo)出新系統(tǒng)模型:定義新系統(tǒng)的邏輯模型,明確新系統(tǒng)的功能需求和其他目標(biāo)。(4)重新定義問(wèn)題:復(fù)查問(wèn)題定義、規(guī)模和目標(biāo),根據(jù)新系統(tǒng)邏輯模型重新定義問(wèn)題。這些問(wèn)題有可能是由于系統(tǒng)分析員誤解產(chǎn)生的,也有可能是之前遺漏的。重新定義問(wèn)題一般需要循環(huán)執(zhí)行(定義、分析、求解、重定義),最終明確新系統(tǒng)的問(wèn)題定義。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程1.可行性分析(5)導(dǎo)出和分析各種可選解決方案:根據(jù)新系統(tǒng)的邏輯模型,從不同角度導(dǎo)出不同的物理模型(物理實(shí)現(xiàn)方案),并分析每一種方案的經(jīng)濟(jì)可行性、技術(shù)可行性和操作可行性,去掉經(jīng)濟(jì)上不合算、用戶沒(méi)有能力操作、技術(shù)上實(shí)現(xiàn)不了的方案,最后為可行的方案制訂進(jìn)度計(jì)劃。(6)推薦行動(dòng)方針:得出可行性研究的結(jié)論,即終止還是繼續(xù)開(kāi)發(fā)。如果繼續(xù)開(kāi)發(fā),則對(duì)推薦方案進(jìn)行成本/效益分析。(7)草擬開(kāi)發(fā)計(jì)劃:為推薦方案制訂開(kāi)發(fā)計(jì)劃,包括進(jìn)度安排、開(kāi)發(fā)人員、硬件設(shè)備、軟件工具、各階段成本估計(jì)等。(8)書寫文檔提交審查:提交可行性研究報(bào)告,總結(jié)各階段的任務(wù)和結(jié)果,給出推薦方案及可行性分析結(jié)果,描述開(kāi)發(fā)計(jì)劃等。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程1.可行性分析軟件系統(tǒng)的需求是以一種清晰、簡(jiǎn)潔、一致且無(wú)二義性的方式,對(duì)一個(gè)待開(kāi)發(fā)系統(tǒng)中各個(gè)有意義方面的陳述的一個(gè)集合。常見(jiàn)的需求有功能需求、數(shù)據(jù)需求、性能需求、環(huán)境需求、可靠性需求、安全保密需求、用戶界面需求、資源使用需求、成本消耗需求、開(kāi)發(fā)進(jìn)度需求等,其中最重要的是功能需求、數(shù)據(jù)需求和性能需求。需求分析通常包括需求獲取和需求規(guī)格說(shuō)明兩部分內(nèi)容,最終的目標(biāo)是形成軟件系統(tǒng)的需求規(guī)格說(shuō)明書。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程2.需求分析需求分析常用的工具有數(shù)據(jù)流程圖和E-R模型。數(shù)據(jù)流程圖(DataFlowDiagram,DFD)用于分析軟件系統(tǒng)的數(shù)據(jù)流,即數(shù)據(jù)在整個(gè)系統(tǒng)中的流動(dòng)和處理過(guò)程。數(shù)據(jù)流分析的目的是建立軟件系統(tǒng)的功能模型,從而給出系統(tǒng)功能需求的規(guī)格說(shuō)明。E-R模型采用E-R圖的方式分析系統(tǒng)中的數(shù)據(jù)需求,包括涉及的實(shí)體以及實(shí)體之間的聯(lián)系。對(duì)于數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)而言,數(shù)據(jù)流分析的最終目標(biāo)是明確系統(tǒng)的數(shù)據(jù)處理過(guò)程,從而導(dǎo)出系統(tǒng)的功能模塊結(jié)構(gòu),而E-R分析的目標(biāo)是明確系統(tǒng)的數(shù)據(jù)需求,最終導(dǎo)出數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程2.需求分析設(shè)計(jì)一般分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。其中概要設(shè)計(jì)階段主要完成軟件系統(tǒng)的體系結(jié)構(gòu)(功能模塊結(jié)構(gòu))設(shè)計(jì)、處理程序設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和接口設(shè)計(jì)等工作;詳細(xì)設(shè)計(jì)階段主要給出每個(gè)模塊具體的輸入/輸出、程序流程、數(shù)據(jù)結(jié)構(gòu)和約束等內(nèi)容,為模塊的編碼奠定基礎(chǔ)。具體介紹如下:(1)軟件的功能模塊結(jié)構(gòu)一般從需求分析的數(shù)據(jù)流程圖中導(dǎo)出,最終建立層次結(jié)構(gòu)的功能模塊劃分。模塊之間的關(guān)系一般通過(guò)控制結(jié)構(gòu)圖來(lái)分析。模塊設(shè)計(jì)的主要指標(biāo)是高內(nèi)聚和低耦合,強(qiáng)調(diào)模塊的高度封裝和獨(dú)立性。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程3.設(shè)計(jì)(2)處理流程設(shè)計(jì)是指多個(gè)模塊組合響應(yīng)系統(tǒng)需求的工作過(guò)程。一般地,在需求分析階段定義的系統(tǒng)功能需求需要借助多個(gè)模塊的功能才能滿足,而處理流程設(shè)計(jì)給出了針對(duì)不同功能需求的模塊組合策略和運(yùn)行流程。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程3.設(shè)計(jì)(3)數(shù)據(jù)庫(kù)設(shè)計(jì)是概要設(shè)計(jì)中的重要內(nèi)容之一。數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ)是需求分析階段得到的E-R模型,再將E-R模型轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型,然后規(guī)范化,一直到建立數(shù)據(jù)庫(kù)物理結(jié)構(gòu)。(4)接口設(shè)計(jì)主要包括內(nèi)部接口設(shè)計(jì)和外部接口設(shè)計(jì)。內(nèi)部接口是指模塊之間的接口關(guān)系,如通過(guò)數(shù)據(jù)庫(kù)交互、通過(guò)共享文件交互等。外部接口是指系統(tǒng)與外部用戶或其他系統(tǒng)之間的接口關(guān)系,如外部數(shù)據(jù)采集接口、輸出接口等。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程3.設(shè)計(jì)(5)詳細(xì)設(shè)計(jì)的主要任務(wù)是精確描述每個(gè)模塊的程序邏輯。詳細(xì)設(shè)計(jì)階段建立了程序設(shè)計(jì)的藍(lán)本,程序員可以據(jù)此進(jìn)行實(shí)際編碼。詳細(xì)設(shè)計(jì)描述一般要給出每個(gè)模塊的輸入/輸出參數(shù)、涉及的數(shù)據(jù)結(jié)構(gòu)、程序流程、出錯(cuò)處理和邊界約束等信息,以便使程序員在編碼時(shí)能夠充分明確模塊的處理過(guò)程。其中最重要的是程序流程設(shè)計(jì)。程序流程設(shè)計(jì)常用的工具有程序流程圖、N-S圖、PAD圖、程序描述語(yǔ)言(偽碼)等。在實(shí)際開(kāi)發(fā)中,可以根據(jù)不同系統(tǒng)的特點(diǎn)選擇不同的描述方法。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程3.設(shè)計(jì)編碼階段主要是完成詳細(xì)設(shè)計(jì)階段各個(gè)模塊的編程實(shí)現(xiàn)任務(wù),包括人機(jī)界面設(shè)計(jì)和程序編碼工作。人機(jī)界面設(shè)計(jì)一般需要遵循3條基本原則:置于用戶控制之下、減少用戶的記憶負(fù)擔(dān)和保持界面一致。程序編碼的基本要求是邏輯清楚、清晰易讀。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程4.編碼軟件系統(tǒng)開(kāi)發(fā)所用的程序設(shè)計(jì)語(yǔ)言一般要根據(jù)自己的特點(diǎn)和需求選擇,主要考慮的因素包括以下幾點(diǎn):(1)軟件的應(yīng)用領(lǐng)域。(2)系統(tǒng)用戶的要求。(3)可以使用的編譯程序。(4)可以得到的軟件工具。(5)工程規(guī)模。(6)程序員的知識(shí)。(7)軟件可移植性。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程4.編碼下面是常見(jiàn)的一些程序設(shè)計(jì)語(yǔ)言與所適用的領(lǐng)域。(1)C/C++語(yǔ)言,適合系統(tǒng)底層實(shí)現(xiàn)及實(shí)時(shí)應(yīng)用。(2)Fortran,適合工程領(lǐng)域。(3)Python、Prolog和Lisp,適合人工智能領(lǐng)域。(4)Dephi、VB,適合MIS應(yīng)用開(kāi)發(fā)。(5)VC、Python,適合信息處理與控制等應(yīng)用開(kāi)發(fā)。(6)Java,適合平臺(tái)無(wú)關(guān)的應(yīng)用。(7)C#、Python、JSP、ASP,適合Web應(yīng)用。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程4.編碼軟件測(cè)試是軟件系統(tǒng)開(kāi)發(fā)過(guò)程中非常重要的一個(gè)步驟。測(cè)試是程序的執(zhí)行過(guò)程,目的在于發(fā)現(xiàn)錯(cuò)誤。一個(gè)好的測(cè)試用例在于能夠發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤,一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試(1)關(guān)于軟件測(cè)試,必須清楚以下幾點(diǎn):9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試①軟件測(cè)試的目的是以最少的時(shí)間和人力,系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。如果成功地實(shí)施了測(cè)試,就能發(fā)現(xiàn)軟件中的錯(cuò)誤。②軟件測(cè)試的附帶收獲是指它能夠證明軟件的功能和性能與需求說(shuō)明相符合。③實(shí)施收集的測(cè)試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。④測(cè)試不能表明軟件中不存在錯(cuò)誤,它只能說(shuō)明軟件中存在錯(cuò)誤。⑤最嚴(yán)重的錯(cuò)誤(從用戶角度)是導(dǎo)致軟件無(wú)法滿足需求的錯(cuò)誤。程序中的問(wèn)題根源可能在開(kāi)發(fā)前期的各階段,糾正錯(cuò)誤也必須追溯到前期工作。⑥軟件測(cè)試不等于程序測(cè)試,軟件測(cè)試應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)過(guò)程,并且在概要設(shè)計(jì)階段就要完成軟件測(cè)試計(jì)劃的編寫。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試(1)關(guān)于軟件測(cè)試,必須清楚以下幾點(diǎn):(2)軟件測(cè)試過(guò)程一般分為單元測(cè)試、集成測(cè)試和確認(rèn)測(cè)試3個(gè)階段。第一階段:?jiǎn)卧獪y(cè)試。單元測(cè)試又稱為模塊測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位——程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)容可能存在的各種差錯(cuò)。單元測(cè)試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例。多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測(cè)試,檢驗(yàn)每個(gè)模塊能否單獨(dú)工作。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試第二階段:集成測(cè)試。在單元測(cè)試的基礎(chǔ)上,需要將所有模塊按照設(shè)計(jì)要求組裝成系統(tǒng),發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問(wèn)題,最終構(gòu)成要求的軟件系統(tǒng)。集成測(cè)試需要考慮多方面的問(wèn)題,通常包括以下幾個(gè)方面:①在把各個(gè)模塊連接起來(lái)時(shí),穿越模塊接口的數(shù)據(jù)是否會(huì)丟失。②一個(gè)模塊的功能是否會(huì)使另一個(gè)模塊的功能產(chǎn)生不利的影響。③各個(gè)功能組合起來(lái),能否達(dá)到預(yù)期要求的功能。④全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問(wèn)題。⑤單個(gè)模塊的誤差累積起來(lái),是否會(huì)放大,從而達(dá)到不能接受的程度。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試第三階段:確認(rèn)測(cè)試。在模擬環(huán)境下,驗(yàn)證集成后的被測(cè)試軟件是否滿足需求規(guī)格說(shuō)明書列出的需求。(3)軟件測(cè)試方法。軟件測(cè)試的基本方法有白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試(White-boxTesting)也稱玻璃盒測(cè)試(Glass-boxTesting),是指測(cè)試者完全知道程序的內(nèi)部結(jié)構(gòu)和處理算法,而黑盒測(cè)試(Black-boxTesting)是指測(cè)試者完全不知道程序的內(nèi)部結(jié)構(gòu)和處理算法的測(cè)試。一般地,單元測(cè)試采用白盒測(cè)試,而集成測(cè)試和確認(rèn)測(cè)試通常采用黑盒測(cè)試。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程5.測(cè)試軟件測(cè)試通過(guò)后即開(kāi)始試運(yùn)行,并進(jìn)入維護(hù)階段。軟件維護(hù)是指在軟件已經(jīng)交付使用后,為了改正錯(cuò)誤或滿足新的需要而修改正性維護(hù)、適應(yīng)性維護(hù)和完善性維護(hù)。(1)改正性維護(hù)。為了識(shí)別和糾正軟件錯(cuò)誤,改善軟件性能上的缺陷,排除實(shí)施中的錯(cuò)誤使用而進(jìn)行的診斷和改正錯(cuò)誤的過(guò)程叫作改正性維護(hù)。在軟件交付使用后,因開(kāi)發(fā)時(shí)測(cè)試的不徹底或不完全,必然會(huì)有部分隱藏的錯(cuò)誤遺留到運(yùn)行階段。這些隱藏下來(lái)的錯(cuò)誤在某些特定的使用環(huán)境下就會(huì)暴露出來(lái)。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程6.運(yùn)行維護(hù)(2)適應(yīng)性維護(hù)。為使軟件適應(yīng)外部環(huán)境或數(shù)據(jù)環(huán)境變化而進(jìn)行的修改軟件的過(guò)程叫作適應(yīng)性維護(hù)。適應(yīng)性維護(hù)一般是由于外部環(huán)境(新的軟硬件配置)變化,或者數(shù)據(jù)環(huán)境(數(shù)據(jù)庫(kù)、數(shù)據(jù)格式、數(shù)據(jù)輸入/輸出方式、數(shù)據(jù)存儲(chǔ)介質(zhì))變化引起的。(3)完善性維護(hù)。為了滿足用戶提出的新的功能與性能要求,需要修改或再開(kāi)發(fā)軟件,以擴(kuò)充軟件功能,增強(qiáng)軟件性能,改進(jìn)加工效率,提高軟件的可維護(hù)性等,這種情況下進(jìn)行的維護(hù)活動(dòng)叫作完善性維護(hù)。9.1.2關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的基本過(guò)程6.運(yùn)行維護(hù)9.3數(shù)據(jù)庫(kù)訪問(wèn)架構(gòu)設(shè)計(jì)ODBC(OpenDataBaseConnectivity,開(kāi)放數(shù)據(jù)庫(kù)互聯(lián))是微軟公司開(kāi)放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分,是一種數(shù)據(jù)庫(kù)訪問(wèn)協(xié)議,提供了訪問(wèn)數(shù)據(jù)庫(kù)的API接口?;贠DBC的應(yīng)用程序,對(duì)數(shù)據(jù)庫(kù)操作不依賴于具體的DBMS,所有數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)DBMS的ODBC驅(qū)動(dòng)程序完成,即系統(tǒng)中不需要安裝DBMS系統(tǒng),但必須有ODBC驅(qū)動(dòng)程序,然后在ODBC管理器中注冊(cè)數(shù)據(jù)源后,就可以在應(yīng)用程序中通過(guò)ODBCAPI訪問(wèn)該數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)處理方面,Java提供的JDBC與ODBC類似,為數(shù)據(jù)庫(kù)開(kāi)發(fā)應(yīng)用提供了標(biāo)準(zhǔn)的應(yīng)用程序編程接口。9.3.1數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)1.ODBC技術(shù)一個(gè)完整的ODBC由下列幾個(gè)部件組成:(1)應(yīng)用程序(ApplicationProgram):包括ODBC管理器(其主要任務(wù)是管理安裝的ODBC驅(qū)動(dòng)程序和管理數(shù)據(jù)源)、驅(qū)動(dòng)程序管理器(DriverManager,包含在ODBC32.dll中,管理驅(qū)動(dòng)程序,是ODBC中最重要的部件)。(2)ODBCAPI:提供ODBC與數(shù)據(jù)庫(kù)之間的接口,是一些DLL,如ODBC驅(qū)動(dòng)程序。(3)數(shù)據(jù)源:包含數(shù)據(jù)庫(kù)位置和數(shù)據(jù)庫(kù)類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。9.3.1數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)1.ODBC技術(shù)目前,支持ODBC的有SQLServer、Oracle、Access等10多種流行的DBMS。當(dāng)使用應(yīng)用程序時(shí),應(yīng)用程序首先通過(guò)使用ODBCAPI與驅(qū)動(dòng)管理器進(jìn)行通信。ODBCAPI由一組ODBC函數(shù)調(diào)用組成,通過(guò)API調(diào)用ODBC函數(shù)提交SQL請(qǐng)求。然后驅(qū)動(dòng)管理器通過(guò)分析ODBC函數(shù)并判斷數(shù)據(jù)源的類型,配置正確的驅(qū)動(dòng)器,并把ODBC函數(shù)調(diào)用傳遞給驅(qū)動(dòng)器。最后,驅(qū)動(dòng)器處理ODBC函數(shù)調(diào)用,把SQL請(qǐng)求發(fā)送給數(shù)據(jù)源,數(shù)據(jù)源執(zhí)行相應(yīng)操作后,驅(qū)動(dòng)器返回執(zhí)行結(jié)果,管理器再把執(zhí)行結(jié)果返回給應(yīng)用程序。9.3.1數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)1.ODBC技術(shù)ADO(ActiveXDataObiects,ActiveX數(shù)據(jù)對(duì)象)是微軟的一個(gè)用于存取數(shù)據(jù)源的COM組件,具有跨系統(tǒng)平臺(tái)的特性。ADO隨微軟的IIS被自動(dòng)安裝,提供了編程語(yǔ)言和統(tǒng)一數(shù)據(jù)訪問(wèn)方式OLEDB的一個(gè)中間層。OLEDB(ObjectLinkandEmbed,對(duì)象連接與嵌入)是一組讀寫數(shù)據(jù)的方法,是一個(gè)低層的數(shù)據(jù)訪問(wèn)接口,可以訪問(wèn)各種數(shù)據(jù)源,包括關(guān)系數(shù)據(jù)庫(kù)、非關(guān)系數(shù)據(jù)庫(kù)、電子郵件、文件系統(tǒng)、文本和圖像等。9.3.1數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)2.ADO技術(shù)ADO是高層數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),相對(duì)于ODBC來(lái)說(shuō),具有面向?qū)ο蟮奶攸c(diǎn)。ADO包括了6個(gè)類:Connection、Command、Recordset、Errors、Parameters和Fields。其中:Connection用于表示和數(shù)據(jù)源的連接,以及處理一些命令和事務(wù);Command用于執(zhí)行某些命令來(lái)進(jìn)行諸如查詢、添加、刪除或更新記錄的操作;Recordset用于處理數(shù)據(jù)源的記錄集,是在表中修改、檢索數(shù)據(jù)的最主要的方法。一個(gè)Recordset對(duì)象由記錄和列(字段)組成。其他3個(gè)類本書不作介紹,讀者可自行查閱相關(guān)資料學(xué)習(xí)。9.3.1數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)2.ADO技術(shù)ADO.NET是一組訪問(wèn)數(shù)據(jù)源的面向?qū)ο蟮念悗?kù)。數(shù)據(jù)源就是數(shù)據(jù)庫(kù),同時(shí)也包括文本文件、Excel表格或者XML文件。ADO.NET是用于和數(shù)據(jù)源打交道的.NET技術(shù),包含了許多DataProviders,分別用于訪問(wèn)不同的數(shù)據(jù)源,取決于它們所使用的數(shù)據(jù)庫(kù)或協(xié)議。ADO.NET提供了訪問(wèn)數(shù)據(jù)源的公共方法,對(duì)于不同的數(shù)據(jù)源,采用不同的類庫(kù),這些類庫(kù)稱為DataProviders?;镜念悗?kù)如表9-1所示(表9-1見(jiàn)教材182頁(yè)),其中API前綴表示它們支持的協(xié)議。9.3.2ADO.NET如果使用OleDbDataProvider連接一個(gè)提供OleDb接口的數(shù)據(jù)源,那么將使用的連接對(duì)象就是OleDbConnection。同理,如果使用Odbc數(shù)據(jù)源或SQLServer數(shù)據(jù)源就分別加上Odbc或Sql前綴,即OdbcConnection或SqlConnection。具體介紹如下:9.3.2ADO.NET1SqlConnection對(duì)象3SqlDataReader對(duì)象2SqlCommand對(duì)象4DataSet對(duì)象5SqlDataAdapter對(duì)象要訪問(wèn)一個(gè)數(shù)據(jù)源,必須先建立一個(gè)到它的連接。這個(gè)連接描述了數(shù)據(jù)庫(kù)服務(wù)器的類型、數(shù)據(jù)庫(kù)名字、用戶名和密碼以及連接數(shù)據(jù)庫(kù)所需要的其他參數(shù)。Command對(duì)象通過(guò)使用Connection對(duì)象指明是在哪個(gè)數(shù)據(jù)庫(kù)上面執(zhí)行SQL命令。9.3.2ADO.NET1.SqlConnection對(duì)象連接數(shù)據(jù)庫(kù)后就可以開(kāi)始操作想要執(zhí)行的數(shù)據(jù)庫(kù),這個(gè)是通過(guò)Command對(duì)象完成的。Command對(duì)象一般被用來(lái)發(fā)送SQL語(yǔ)句給數(shù)據(jù)庫(kù)。Command對(duì)象通過(guò)Connection對(duì)象指明應(yīng)該與哪個(gè)數(shù)據(jù)庫(kù)進(jìn)行連接。既可以用Command對(duì)象來(lái)直接執(zhí)行SQL命令,也可以將一個(gè)Command對(duì)象的引用傳遞給SQLDataAdapter。SQLDataAdapter包含了一系列的Command對(duì)象,可以處理大量的數(shù)據(jù)。9.3.2ADO.NET2.SqlCommand對(duì)象許多數(shù)據(jù)庫(kù)操作僅僅只是需要讀取一組數(shù)據(jù)。通過(guò)DataReader對(duì)象,可以獲得從Command對(duì)象的select語(yǔ)句得到的結(jié)果。DataReader返回的數(shù)據(jù)流被設(shè)計(jì)為只讀的、單向的,只能按照一定的順序從數(shù)據(jù)流中取出數(shù)據(jù)。9.3.2ADO.NET3.SqlDataReader對(duì)象DataSet對(duì)象用于表示那些存儲(chǔ)在內(nèi)存中的數(shù)據(jù),包括多個(gè)DataTable對(duì)象。DataTable就像一個(gè)普通的數(shù)據(jù)庫(kù)中的表一樣,也有行和列,能夠通過(guò)定義表和表之間的關(guān)系來(lái)創(chuàng)建從屬關(guān)系。DataSet對(duì)象主要用于管理存儲(chǔ)在內(nèi)存中的數(shù)據(jù)以及對(duì)數(shù)據(jù)的斷開(kāi)操作。9.3.2ADO.NET4.DataSet對(duì)象SqlDataAdapter通過(guò)斷開(kāi)模型來(lái)減少數(shù)據(jù)庫(kù)調(diào)用的次數(shù),把讀取的數(shù)據(jù)緩存在內(nèi)存中。當(dāng)批量完成對(duì)數(shù)據(jù)庫(kù)的讀寫操作并將改變寫回?cái)?shù)據(jù)庫(kù)時(shí),DataAdapter會(huì)填充DataSet對(duì)象。DataAdapter里包含了Connection對(duì)象,當(dāng)對(duì)數(shù)據(jù)源進(jìn)行讀取或?qū)懭霑r(shí),DataAdapter會(huì)自動(dòng)地打開(kāi)或關(guān)閉連接。此外,DataAdapter還包含對(duì)數(shù)據(jù)的select、insert、update和delete操作的Command對(duì)象引用。9.3.2ADO.NET5.SqlDataAdapter對(duì)象C#語(yǔ)言(CSharp)是一種面向?qū)ο蟮木幊陶Z(yǔ)言,是專門為.NET的應(yīng)用而開(kāi)發(fā)的語(yǔ)言,吸收了C++、VisualBasic、Delphi和Java等語(yǔ)言的優(yōu)點(diǎn),可以通過(guò)它編寫在.NETFramework上運(yùn)行的各種安全可靠的應(yīng)用程序。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)連接對(duì)象用于提供與數(shù)據(jù)庫(kù)的連接。常用的連接對(duì)象有以下幾種:(1)SqlConnection:只連接SQLServer。(2)OleDbConnection:連接支持OleDb的任何數(shù)據(jù)源SQLServer、Access、DB2等。(3)OdbcConnection:連接建立的ODBC數(shù)據(jù)源。(4)OracleConnection:只連接Oracle數(shù)據(jù)庫(kù)。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法1)連接對(duì)象——Connect使用SqlConnection對(duì)象的基本步驟如下:(1)引用命名空間,即usingSystem.Data.SqlClient;(2)使用構(gòu)造函數(shù)實(shí)例化連接對(duì)象,即SqlConnectionSqlConn=newSqlConnection(DB連接字符串);9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法1)連接對(duì)象——Connect方法如下:·Open():打開(kāi)一個(gè)連接,建立到數(shù)據(jù)源的物理連接。例如:SqlConn.Open();·Close():關(guān)閉一個(gè)連接。屬性如下:State:連接狀態(tài)。例如:if(SqlConn.State==ConnectionState.Open)SqlConn.Close();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法1)連接對(duì)象——Connect例9-1

SqlConnection對(duì)象示例。代碼如下:usingSystem.Data.SqlClient;StringstrConn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(strConn);SqlConn.Open();…//其他代碼SqlConn.Close();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法1)連接對(duì)象——ConnectDataAdapter表示一組SQL命令和一個(gè)數(shù)據(jù)庫(kù)連接,用于填充DataSet和更新數(shù)據(jù)源。DataAdapter對(duì)象是一個(gè)數(shù)據(jù)適配器對(duì)象,是DataSet與數(shù)據(jù)源之間的橋梁。DataAdapter對(duì)象提供4個(gè)屬性,分別是SelectCommand屬性、InsertCommand屬性、DeleteCommand屬性和UpdateCommand屬性,用于實(shí)現(xiàn)與數(shù)據(jù)源之間的互通。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter常用的數(shù)據(jù)適配器對(duì)象有以下幾種:(1)SqlDataAdapter:只適用于SQLServer。(2)OleDbDataAdapter:適用于支持OleDB的任何數(shù)據(jù)源SQLServer、Access、DB2等。(3)OdbcDataAdapter:適用于建立ODBC數(shù)據(jù)源。(4)OracleDataAdapter:只適用于Oracle數(shù)據(jù)庫(kù)。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter下面重點(diǎn)介紹SqlDataAdapter。(1)SqlDataAdapter的特性。SqlDataAdapter類用作ADO.NET對(duì)象模型中和數(shù)據(jù)連接部分和未連接部分之間的橋梁。SqlDataAdapter從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),并將其存儲(chǔ)在DataSet中。SqlDataAdapter也可能取得DataSet中的更新,并將它們提交給數(shù)據(jù)庫(kù)。通過(guò)調(diào)用Fill方法填充DataSet。如果調(diào)用Fill方法時(shí)SqlDataAdapter與數(shù)據(jù)庫(kù)的連接不是打開(kāi)的,則SqlDataAdapter將打開(kāi)數(shù)據(jù)庫(kù)連接,查詢數(shù)據(jù)庫(kù),提取查詢結(jié)果,將查詢結(jié)果填入DataSet,然后關(guān)閉數(shù)據(jù)庫(kù)的連接。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter(2)SqlDataAdapter的創(chuàng)建和使用。SqlDataAdapter將查詢結(jié)果存儲(chǔ)到DataSet中時(shí),SqlDataAdapter使用SqlCommand和SqlConnection與數(shù)據(jù)庫(kù)進(jìn)行通信。SqlDataAdapter在內(nèi)部使用SqlDataReader獲取結(jié)果,并將信息存儲(chǔ)到DataSet的新行。SqlCommand類的屬性包括SelectCommand、InsertCommand、UpdateCommand和DeleteCommand,分別對(duì)應(yīng)數(shù)據(jù)庫(kù)的查詢、插入、更新和刪除操作。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter(3)使用New關(guān)鍵字創(chuàng)建SqlDataAdapter。New關(guān)鍵字建立新的SqlDataAdapter對(duì)象后,再設(shè)置其SqlCommand屬性。代碼如下:SqlDataAdapterSqlAdapter=newSqlDataAdapter();--創(chuàng)建一個(gè)SqlDataAdapter對(duì)象SqlAdapter.SelectCommand=cmd;--設(shè)置SqlDataAdapter對(duì)象的SelectCommand屬性為cmd9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter(4)SqlDataAdapter的構(gòu)造函數(shù)。StrSql是查詢語(yǔ)句;StrConn是數(shù)據(jù)庫(kù)連接字符串;cmd是SqlCommand對(duì)象;cn是SqlConnection對(duì)象。SqlDataAdapterSqlAdapter=newSqlDataAdapter(StrSql,StrConn);SqlDataAdapterSqlAdapter=newSqlDataAdapter(StrSql,cn);SqlDataAdapterSqlAdapter=newSqlDataAdapter(cmd);9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter使用SqlDataAdapter對(duì)象的基本步驟如下:第一步,引用命名空間,即usingSystem.Data.SqlClient;第二步,使用構(gòu)造函數(shù)實(shí)例化適配器對(duì)象,即SqlDataAdapterSqlAdapter=newSqlDataAdapter(查詢語(yǔ)句,連接對(duì)象);方法如下:Fill(數(shù)據(jù)集,表名)//將查詢數(shù)據(jù)以指定表名填入數(shù)據(jù)集中例如:DataSetMyDataSet=newDataSet();//創(chuàng)建一個(gè)Dataset對(duì)象SqlAdapter.Fill(MyDataSet,"MyTable");9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter例9-2

SqlDataAdapter對(duì)象示例。代碼如下:usingSystem.Data.SqlClient;StringStrConn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(StrConn);StringStrSql="select*fromstudinfo";SqlDataAdapterSqlAdapter=newSqlDataAdapter(StrSql,SqlConn);9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法2)數(shù)據(jù)適配器——DataAdapter數(shù)據(jù)集是從數(shù)據(jù)源檢索的記錄的緩存,一般配合數(shù)據(jù)適配器(DataAdapter)使用,調(diào)用數(shù)據(jù)適配器的Fill方法填充數(shù)據(jù)集。使用DataSet對(duì)象的基本步驟如下:第一步,引用命名空間,即usingSystem.Data;第二步,使用構(gòu)造函數(shù)實(shí)例化數(shù)據(jù)集對(duì)象,即DataSetMyDataSet=newDataSet();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法3)數(shù)據(jù)集——DataSet屬性如下:Tables[表名]例如:usingSystem.Data;DataSetMyDataSet=newDataSet();SqlAdapter.Fill(MyDataSet,"MyTable");DataTableT_Studinfo=MyDataSet.Tables["MyTable"];9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法3)數(shù)據(jù)集——DataSet例9-3DataSet對(duì)象示例。代碼如下:usingSystem.Data.SqlClient;StringStrConn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(StrConn);StringStrSql="select*fromstudinfo";SqlDataAdapterSqlAdapter=newSqlDataAdapter(StrSql,SqlConn);DataSetMyDataSet=newDataSet();SqlAdapter.Fill(MyDataSet,"MyTable");DataTableT_Studinfo=MyDataSet.Tables["MyTable"];9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法3)數(shù)據(jù)集——DataSet例9-4SQLServer數(shù)據(jù)表顯示示例。代碼如下:usingSystem.Data.SqlClient;//引用命名空間...//添加一個(gè)DataGridView控件,命名為GrdInfostringStrconn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(Strconn);stringStrSql="select*fromstudinfo";SqlDataAdapterSqlAdapter=newSqlDataAdapter(StrSql,SqlConn);DataSetMyDataSet=newDataSet();SqlAdapter.Fill(MyDataSet,"MyTable");GrdInfo.DataSource=MyDataSet.Tables["MyTable"];9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法3)數(shù)據(jù)集——DataSet(1)命令對(duì)象。Command一般執(zhí)行select、insert、update、delete命令。它必須與連接對(duì)象配合使用,且必須顯示打開(kāi)連接。常用的數(shù)據(jù)命令對(duì)象有以下幾種:①SqlCommand:只適用于SQLServer。②OleDbCommand:適用于支持Oledb的任何數(shù)據(jù)源(SQLServer、Access等)。③OdbcCommand:適用于建立ODBC數(shù)據(jù)源。④OracleCommand:只適用于Oracle數(shù)據(jù)庫(kù)。Command常用的屬性和方法如表9-2所示(表9-2見(jiàn)教材187頁(yè))。例如:IntRCount=SqlCommand.ExecuteNonQuery();當(dāng)創(chuàng)建好一個(gè)SqlCommand對(duì)象之后,還要正確設(shè)置SqlCommand對(duì)象的屬性才能使用。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法4)數(shù)據(jù)命令操作對(duì)象——Command(2)使用Command對(duì)象的基本步驟。代碼格式如下:SqlCommandSqlComm=newSqlCommand(命令文本,連接對(duì)象)9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法4)數(shù)據(jù)命令操作對(duì)象——Command例9-5SqlCommand對(duì)象。代碼如下:stringStrconn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(Strconn);SqlConn.Open();stringStrSql="insertintoclassinfo(classid,classname,classdesc)values('20070101','計(jì)算機(jī)07','班來(lái)自5個(gè)城市')";SqlCommandSqlComm=newSqlCommand(StrSql,SqlConn);SqlComm.ExecuteNonQuery();SqlConn.Close();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法4)數(shù)據(jù)命令操作對(duì)象——CommandDataReader對(duì)象提供了順序的、只讀的方式讀取Command對(duì)象獲得的數(shù)據(jù)結(jié)果集。DataReader對(duì)象有許多屬性和方法,如表9-3所示(表9-3見(jiàn)教材188頁(yè))。要想讀取DataReader對(duì)象中的數(shù)據(jù),就要用到DataReader對(duì)象的Read方法。由于DataReader對(duì)象每次只在內(nèi)存緩沖區(qū)里存儲(chǔ)結(jié)果集中的一條數(shù)據(jù),因此要讀取DataReader對(duì)象中的多條數(shù)據(jù),就要用到迭代語(yǔ)句。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法5)SqlDataReader對(duì)象例9-6

使用SqlCommand對(duì)象創(chuàng)建SqlDataReader對(duì)象。代碼如下:stringStrSql="select*fromclasinfo";SqlCommandSqlcomm=newSqlCommand(StrSql,SqlComm);SqlDataReaderSqlReader=SqlComm.ExecuteReader();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法5)SqlDataReader對(duì)象例9-7SqlDataReader對(duì)象示例。添加一個(gè)ListBox控件,命名為L(zhǎng)stStudNo。代碼如下:StringStrConn="DataSource=xwq123\SQLEXPRESS;InitialCatalog=studscore_wl;UserID=sa;Password=xwq123;";SqlConnectionSqlConn=newSqlConnection(StrConn);SqlConn.Open();stringStrSql="select*fromclassinfo";9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法5)SqlDataReader對(duì)象SqlCommandSqlComm=newSqlCommand(StrSql,SqlConn);SqlDataReaderSqlReader=SqlComm.ExecuteReader();LstStudNo.Items.Claer();While(SqlReader.Read()){LstStudNo.Items.Add(SqlReader["StudNo"].ToString());}SqlReader.Close();SqlConn.Close();9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)1.ADO.NET訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的方法5)SqlDataReader對(duì)象在MicrosoftVisualStudio官網(wǎng)下載VisualStudioCommunity2019,這是一個(gè)功能強(qiáng)大的集成開(kāi)發(fā)環(huán)境,供學(xué)習(xí)者免費(fèi)使用。進(jìn)入VisualStudio安裝程序,安裝VisualStudioCommunity2019,如圖9-5所示。安裝結(jié)束,“安裝”按鈕名稱變成“修改”按鈕,如果需要卸載,則單擊“更多”下拉菜單,選擇“卸載”即可。9.3.3C#操作SQLServer數(shù)據(jù)庫(kù)2.C#操作SQLServer數(shù)據(jù)庫(kù)圖9-5VisualStudio安裝界面操作步驟如下:(1)安裝結(jié)束,重新啟動(dòng)計(jì)算機(jī)。再次進(jìn)入VisualStudio安裝程序,單擊“啟用”按鈕,進(jìn)入“打開(kāi)”或“開(kāi)始使用”界面,單擊“創(chuàng)建新項(xiàng)目”按鈕,如圖9-6所示。9.3.3C#操作

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論