999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于不同高級語言環(huán)境下關(guān)系型數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2013-04-29 23:33:45隋東
課程教育研究·中 2013年5期
關(guān)鍵詞:數(shù)據(jù)庫語言

隋東

【摘要】本文嘗試將SQL語言嵌入到VB6.0、VB.NET和C#高級語言中,開發(fā)設(shè)計(jì)一個(gè)具有增、刪、改和查詢功能的學(xué)生成績管理系統(tǒng),對其中運(yùn)用的關(guān)鍵技術(shù)進(jìn)行剖析和對比。并在對各種理論進(jìn)行闡述的同時(shí)配合系統(tǒng)的實(shí)現(xiàn)和關(guān)鍵技術(shù)的應(yīng)用加以說明。

【關(guān)鍵詞】ADO.NET VB6.0 VB.NET C# SQL SERVER T-SQL 類

【中圖分類號】G42 【文獻(xiàn)標(biāo)識碼】A 【文章編號】2095-3089(2013)05-0243-03

前言

中央廣播電視大學(xué)的數(shù)據(jù)庫應(yīng)用技術(shù)教材是基于VB6.0和SQL SERVER2000實(shí)驗(yàn)環(huán)境下的,這為我們的數(shù)據(jù)庫應(yīng)用技術(shù)教學(xué)實(shí)踐帶來一些困擾和不便,尤其不便于學(xué)生課后更準(zhǔn)確有效地自學(xué)教材。對此問題,筆者借助多年教學(xué)經(jīng)驗(yàn)的積累,將中央電大本門課程的形考任務(wù)“數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)”在VB6.0、VB.NET和C#多種環(huán)境下的實(shí)現(xiàn)進(jìn)行了思考和實(shí)驗(yàn),對不同環(huán)境下的數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)方法和關(guān)鍵技術(shù)進(jìn)行了比較,能夠有效地指導(dǎo)學(xué)生在不同應(yīng)用程序開發(fā)環(huán)境下,以簡捷的方式、方法,較快地設(shè)計(jì)、實(shí)現(xiàn)一個(gè)具備增、刪、改、查詢功能的小型數(shù)據(jù)庫應(yīng)用系統(tǒng),同時(shí)滿足了學(xué)生接受新事物、新技術(shù)的愿望,激發(fā)了他們搞好畢業(yè)設(shè)計(jì)的創(chuàng)作熱情,為學(xué)生們后續(xù)畢業(yè)設(shè)計(jì)打下了堅(jiān)實(shí)的基礎(chǔ)。

實(shí)現(xiàn)

本系統(tǒng)是基于 C/S 結(jié)構(gòu)的信息管理系統(tǒng),分別使用 VB6.0、VB.NET和C#作為開發(fā)語言,前端應(yīng)用程序通過ADO、ADO.NET技術(shù)來與數(shù)據(jù)庫進(jìn)行連接,優(yōu)點(diǎn)是易于使用、高速度、低內(nèi)存支出和占用磁盤空間較少。

該數(shù)據(jù)庫應(yīng)用系統(tǒng)雖然規(guī)模小,但是已經(jīng)具備增加、修改、刪除、查詢等系統(tǒng)功能。下面介紹一下系統(tǒng)開發(fā)的主要方法:

一、進(jìn)行數(shù)據(jù)庫設(shè)計(jì)

(一)需求分析

1.業(yè)務(wù)流程分析

“學(xué)生成績管理系統(tǒng)”,主要目的是用以實(shí)現(xiàn)學(xué)生、課程以及成績等多項(xiàng)管理。本系統(tǒng)管理的對象簡單,每個(gè)數(shù)據(jù)之間都有較強(qiáng)的關(guān)聯(lián)性,涉及過程并不復(fù)雜。因此,比較適合于數(shù)據(jù)庫管理。

2.數(shù)據(jù)流程分析

圖1學(xué)生成績管理數(shù)據(jù)流程圖

(二)概念結(jié)構(gòu)設(shè)計(jì)

根據(jù)需求分析的結(jié)果,進(jìn)行概念結(jié)構(gòu)設(shè)計(jì),依照收集信息→標(biāo)識對象(實(shí)體)→標(biāo)識每個(gè)對象需要存儲(chǔ)的詳細(xì)信息(屬性)→標(biāo)識對象之間的關(guān)系的步驟,采用E-R圖工具表示,設(shè)計(jì)結(jié)果如圖2所示:

圖2學(xué)生成績管理E-R圖

(三)邏輯結(jié)構(gòu)設(shè)計(jì)和物理實(shí)現(xiàn)

邏輯結(jié)構(gòu)設(shè)計(jì)的方法與步驟,是將概念結(jié)構(gòu)設(shè)計(jì)的結(jié)果E-R圖轉(zhuǎn)換為某個(gè)DBMS所支持的數(shù)據(jù)模型,并對其進(jìn)行優(yōu)化的過程。具體過程為:

將各實(shí)體轉(zhuǎn)化為對應(yīng)的表,將各屬性轉(zhuǎn)化為各表對應(yīng)的列;標(biāo)識每個(gè)表的主鍵列;在表之間體現(xiàn)實(shí)體之間的映射關(guān)系,遵守參照完整性規(guī)則;根據(jù)范式理論,對表進(jìn)行修改,盡量滿足第三范式。

通過規(guī)范化數(shù)據(jù)庫設(shè)計(jì),可以減少存儲(chǔ)的冗余數(shù)據(jù)量,減輕數(shù)據(jù)維護(hù)工作,減少存儲(chǔ)的要求,提高數(shù)據(jù)庫的完整性。

物理實(shí)現(xiàn)階段的主要工作是,把設(shè)計(jì)好的數(shù)據(jù)庫全局模式轉(zhuǎn)換為相應(yīng)的內(nèi)模式。在此用以上方法建立一個(gè)名稱為“學(xué)生成績管理”的數(shù)據(jù)庫,其中包含3張數(shù)據(jù)表,即學(xué)生情況表、課程情況表、學(xué)生成績表。

二、操縱和訪問數(shù)據(jù)庫的基本SQL語句

SQL是關(guān)系數(shù)據(jù)庫支持的標(biāo)準(zhǔn)查詢語言,也是一種雙重式語言,即用于查詢和更新的交互式數(shù)據(jù)庫語言(Interactive SQL),又是一種應(yīng)用程序進(jìn)行數(shù)據(jù)庫訪問時(shí)所采取的編程式數(shù)據(jù)庫語言,即嵌入式SQL(Embedded SQL)[1]。嵌入式SQL是數(shù)據(jù)庫應(yīng)用程序的一種開發(fā)方法。它要將SQL語句直接嵌入到程序的源代碼中,與其他程序設(shè)計(jì)語言語句混合使用。

開發(fā)的應(yīng)用程序?qū)⑨槍ι鲜鰯?shù)據(jù)庫進(jìn)行管理,主要有插入(insert)、修改(update)、刪除(delete)、查詢(select)和打印(print)等5種基本的操作。

三、界面設(shè)計(jì)

(一)創(chuàng)建項(xiàng)目工程

項(xiàng)目工程名稱為“學(xué)生成績管理”。

(二)創(chuàng)建主窗體

運(yùn)用菜單技術(shù)創(chuàng)建主窗體。

(三)創(chuàng)建增加、刪除、修改、查詢功能窗體

使用標(biāo)簽、文本框、組合框、表格、命令按鈕等控件,添加并創(chuàng)建“查詢記錄”、“增加新記錄”、“修改記錄”、“刪除記錄”等窗體。

四、代碼設(shè)計(jì)

.NET框架的一個(gè)主要組成部分是類庫,這些類被拆分為命名空間,它是類庫的邏輯分區(qū)。類庫所采用的命名空間是層次結(jié)構(gòu),即命名空間下又可以再分成子命名空間,每個(gè)命名空間都包含一組按照功能劃分的相關(guān)的類。

在.NET環(huán)境下,必須指向包含所使用類的命名空間(例如Imports System.Data,Imports System.Data.SqlClient)才能激活相應(yīng)的類;借助于封裝,把常用的數(shù)據(jù)連接、數(shù)據(jù)庫查詢和對數(shù)據(jù)庫操縱的功能模塊定義為公共函數(shù),包括createConn()用于建立數(shù)據(jù)庫連接的函數(shù),sqlUpdate()用于對數(shù)據(jù)庫操縱的函數(shù),sqlfind()用于數(shù)據(jù)庫查詢的函數(shù);使用時(shí)調(diào)用即可,避免相同功能模塊的重復(fù)建設(shè)。針對該系統(tǒng),筆者創(chuàng)建了SqlConnection、SqlCommand公共類的實(shí)例和系統(tǒng)常用的公共函數(shù)。

在不同模塊的設(shè)計(jì)中都可以調(diào)用這些自定義函數(shù),在此不再贅述。

五、報(bào)表設(shè)計(jì)

一個(gè)功能完整的數(shù)據(jù)庫應(yīng)用系統(tǒng),除了具有數(shù)據(jù)維護(hù)、查詢和顯示功能外,還必須具有報(bào)表輸出功能。Visual Studio2005報(bào)表體系結(jié)構(gòu)圖],其ReportViewer控件負(fù)責(zé)解釋RDLC報(bào)表定義、處理報(bào)表參數(shù)并按照各種用戶可選格式提供報(bào)表的“報(bào)表處理器”。它既可以運(yùn)行于“本地模式”也可以運(yùn)行于“遠(yuǎn)程模式”[2]。由用戶編寫的存儲(chǔ)過程負(fù)責(zé)管理連接或運(yùn)行基于參數(shù)的查詢;報(bào)表只駐留以報(bào)表為中心的Parameters集合,尋址遠(yuǎn)程報(bào)表服務(wù)并呈現(xiàn)給用戶。

六、幾種實(shí)現(xiàn)方法的比較

嵌入式SQL在VB6.0下和在VB.NET下使用的基本形式和處理過程對比如下:

(一)在VB6.0環(huán)境下的具體實(shí)現(xiàn)

ADO是微軟公司提出的第三種數(shù)據(jù)庫訪問對象,它把OLE DB封裝在一個(gè)數(shù)據(jù)對象中,使得VB6.0程序可以方便地實(shí)現(xiàn)對數(shù)據(jù)庫的訪問。ADO對象模型共包含7個(gè)對象,即Connection,command,Recordset,Parameter,Property,F(xiàn)ield和Error。

VB6.0應(yīng)用程序中主要用Connection對象建立與數(shù)據(jù)庫的連接,用Recordset和Field對象,對數(shù)據(jù)表進(jìn)行操作,實(shí)現(xiàn)數(shù)據(jù)表增加、刪除、修改等不返回結(jié)果集的操作,語法參閱文獻(xiàn)[1]。

(二)在VB.NET環(huán)境下的具體實(shí)現(xiàn)

ADO.NET是微軟.NET Framework框架中針對與數(shù)據(jù)庫進(jìn)行交互的一組對象類的名稱[3]。ADO.NET提供對Microsoft SQL Server、Oracle等數(shù)據(jù)源以及通過 OLEDB和XML公開的數(shù)據(jù)源的一致訪問,也就是提供與數(shù)據(jù)源進(jìn)行交互的相關(guān)的公共方法。應(yīng)用程序可以使用ADO.NET來連接到這些數(shù)據(jù)源,并檢索、操作和更新數(shù)據(jù)。

ADO.Net比ADO更適用于分布式應(yīng)用環(huán)境,增加了更好的性能;它有更好的可操作性、它可以結(jié)合XML語言來開發(fā)數(shù)據(jù)庫;它有更好的可維護(hù)性、可編程性和可伸縮性。

ADO.NET對象模型中包含五個(gè)主要的組件,即是Connection對象、Command對象、 Dataadapter對象、Datareader對象以及Dataset對象。ADO.NET架構(gòu)圖參見[3]。

其中Connection對象、Command對象、 DataAdapter對象和DataReader對象四個(gè)組件是負(fù)責(zé)建立聯(lián)機(jī)與數(shù)據(jù)操作部分的,被稱為數(shù)據(jù)提供組件 (Managed Providers)。而Dataset對象是ADO.NET非連接架構(gòu)下把數(shù)據(jù)庫中的數(shù)據(jù)映射到內(nèi)存緩存中所構(gòu)成的數(shù)據(jù)容器,是一個(gè)或多個(gè)DataTable 對象的集合。DataSet在使用時(shí)就像駐留在客戶端計(jì)算機(jī)上的一個(gè)小型關(guān)系數(shù)據(jù)庫,但又與任何具體的數(shù)據(jù)庫完全無關(guān)。DataAdapter對象在后臺數(shù)據(jù)庫和前臺Dataset對象之間起著橋梁作用。其Fill方法將后臺數(shù)據(jù)庫的數(shù)據(jù)取到前臺客戶端的Dataset對象中來。而其Update方法則按相反方向把前臺對數(shù)據(jù)庫的寫操作寫入數(shù)據(jù)庫中去,它由應(yīng)用程序在Dataset中添加、更改或刪除的行對數(shù)據(jù)庫進(jìn)行更新,在使用DataAdapter時(shí),需要將查出的數(shù)據(jù)起一個(gè)表名放到DataSet中。一個(gè)Dataset可以存放多個(gè)表,而TableAdapter的結(jié)果就是一個(gè)表,不能再繼續(xù)添加表。

DataReader實(shí)現(xiàn)數(shù)據(jù)操作以及對數(shù)據(jù)的快速、只進(jìn)、只讀訪問。Connection對象提供與數(shù)據(jù)源的連接。Command對象能夠訪問用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲(chǔ)過程、發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流。它需要與數(shù)據(jù)庫保持連接,ExecuteReader()函數(shù)返回一個(gè)SqlDataReader對象或OleDbDataReader對象,通過這個(gè)對象來檢查查詢結(jié)果,它是一種“單向”流,一次只能提供一行數(shù)據(jù),就像高速傳送帶上的一排箱子,一旦它們被放在帶子上,就無法對它們排序或過濾出選定的箱子,也因此占用內(nèi)存少,執(zhí)行效率高。當(dāng)用戶讀取大量數(shù)據(jù)時(shí),可以使用DataReader來提高性能。

根據(jù)應(yīng)用程序所需功能和性能的要求,來確定是使用DataSet還是DataReader。

嵌入式SQL在VB.NET環(huán)境下通過SqlCommand.ExecuteNonQuery()方法,對連接執(zhí)行SQL語句,并返回受影響的行數(shù),當(dāng)行數(shù)大于0時(shí),命令執(zhí)行成功,否則說明對數(shù)據(jù)庫沒產(chǎn)生影響。通過使用SqlCommand.ExecuteScalar()方法來執(zhí)行命令對象的SQL語句,從數(shù)據(jù)庫中檢索單個(gè)值,當(dāng)值大于0時(shí),命令執(zhí)行成功,否則命令執(zhí)行失敗。該方法不接受任何參數(shù),僅僅返回查詢結(jié)果集中的第一行第一列。

在VB.NET環(huán)境下通過調(diào)用以上定義的函數(shù),就可以實(shí)現(xiàn)使用各種嵌入式SQL語句來操縱后臺數(shù)據(jù)庫的功能。

(三)C#語言環(huán)境下的設(shè)計(jì)實(shí)現(xiàn)

由于C#簡單易學(xué),而且可以跨平臺使用,因此它正在成為程序開發(fā)人員使用的主流編程語言。[4] 它具有如下諸多優(yōu)點(diǎn):

C#遵守通用語言規(guī)范(common language specification,CLS)。

C#具備自動(dòng)內(nèi)存管理功能:CLR 內(nèi)建垃圾收集器,當(dāng)變量實(shí)例的生命周期結(jié)束時(shí),垃圾收集器負(fù)責(zé)收回不被使用的實(shí)例占用的內(nèi)存空間。

C#具有交叉語言處理能力:由于任何遵守通用語言規(guī)范的程序設(shè)計(jì)語言源程序,都可編譯為相同的中間語言代碼,不同語言設(shè)計(jì)的組件,可以互相通用,可以從其他語言定義的類派生出語言的新類。

C#更加安全:C#語言不支持指針,一切對內(nèi)存的訪問都必須通過對象的引用變量來實(shí)現(xiàn),只允許訪問內(nèi)存中允許訪問的部分,這就防止病毒程序使用非法指針訪問私有成員,也避免指針的誤操作產(chǎn)生的錯(cuò)誤。

C#軟件的安裝更加容易:在.NET 中這些組件或動(dòng)態(tài)連接庫不必在注冊表中注冊,每個(gè)程序都可以使用自帶的組件或動(dòng)態(tài)連接庫,使軟件的安裝更加容易。

C#是完全面向?qū)ο蟮模篊#語言中所有的函數(shù)、變量和常量都必須定義在類中,避免了命名沖突。C#語言不支持多重繼承。

在開發(fā)項(xiàng)目中以類的形式來組織、封裝一些常用的方法和事件,不僅可以提高代碼的重用率,也大大方便了代碼的管理。

本系統(tǒng)中using System.Data.SqlClient命名空間包含有關(guān)專門操作SqlServer數(shù)據(jù)庫的類,如SqlConnection,SqlCommand,SqlDateAdapter等,System.Data命名空間包含數(shù)據(jù)庫操作所需要用到的普通數(shù)據(jù),如數(shù)據(jù)表,數(shù)據(jù)行等;DbHelperSQL類定義了與數(shù)據(jù)庫的連接配置、執(zhí)行SQL語句的公用方法等。調(diào)用并且構(gòu)建這些類的實(shí)例設(shè)計(jì)完成系統(tǒng)主窗體和系統(tǒng)的增、刪、改、查詢功能。

七、結(jié)論

(一)在不同高級語言環(huán)境下創(chuàng)建應(yīng)用程序的過程都一樣。

(二)在不同環(huán)境下使用的SQL語句都完全一樣,可以實(shí)現(xiàn)同樣的數(shù)據(jù)庫操縱功能。

(三)在VB6.0環(huán)境下編寫的應(yīng)用程序,搬到.NET環(huán)境下不能使用。

(四)NET開發(fā)平臺具有更加強(qiáng)大的內(nèi)部函數(shù)庫,.NET編程很大程度上依靠程序庫中提供的可重用源代碼,.NET框架提供了2500多個(gè)可重用的類。公共語言運(yùn)行時(shí)庫(CLR)提供了執(zhí)行程序的服務(wù),實(shí)現(xiàn)了編程語言的統(tǒng)一。.NET程序需要經(jīng)過兩次編譯才能在CPU上運(yùn)行,首先編譯生成與CPU無關(guān)的中間語言(MSIL)程序,在CLR的支持下,中間語言程序被編譯成由本地CPU指令組成的程序,實(shí)現(xiàn)了.NET跨平臺運(yùn)行的目標(biāo)。[5]

(五)NET采用ADO.NET數(shù)據(jù)訪問技術(shù),支持離線的數(shù)據(jù)訪問功能,同時(shí)提供了只進(jìn)的、一次只能讀取一條記錄的消耗資源極小的DataReader對象,提高了應(yīng)用程序?qū)?shù)據(jù)庫訪問的性能。更適用于分布式數(shù)據(jù)庫應(yīng)用系統(tǒng)的應(yīng)用。

(六)VB.NET和C#生成的代碼可以完全通用。VB提供了很多類型轉(zhuǎn)換函數(shù)型運(yùn)算符,如CInt(), CSng(), CStr()等,在C#中只要用(int) , (float), (String)即可; VB支持兩種形式的異常,即.net框架的異常和VB自己的錯(cuò)誤號碼,而C#只支持第一種。用到VB自己的錯(cuò)誤號碼的程序幾乎無法移植到C#中。

(七)VB支持模塊,C#不支持。在C#中制造一個(gè)abstract類,共享所有成員,就和模塊一樣了。C#不能像VB一樣直接訪問模塊中的成員,需要使用“類名.成員名”的用法。

(八)C#代碼更加簡潔,像VB.NET一樣簡單,像C++一樣強(qiáng)大, 是第一流的面向組件的語言。C#語言是.NETFrame Work 中新一代的開發(fā)工具,是一種現(xiàn)代的、面向?qū)ο蟮恼Z言,它簡化了C++語言在類、命名空間、方法重載和異常處理等方面的操作,摒棄了 C++的復(fù)雜性,更易使用,更少出錯(cuò)。它使用組件編程,和VB一樣容易使用。C#語法和 C++、JAVA 語法非常相似。所有的.NET Framework中的基類庫(Base Class Library)都由C# 編寫。

參考文獻(xiàn):

[1]劉世峰.數(shù)據(jù)庫應(yīng)用技術(shù)(本科)[M].中央廣播電視大學(xué)出版社,2008,103

[2]顧曉梅.數(shù)據(jù)庫應(yīng)用技術(shù)教程[M],上海電視大學(xué)教材, 2010, 171

[3]呂軍.軟件項(xiàng)目綜合實(shí)訓(xùn)(.NET篇)[M],清華大學(xué)出版社,2010,96~97

[4]明日科技 王小科,王軍,趙會(huì)東.C#項(xiàng)目開發(fā)案例全程實(shí)錄(第2版)[M],清華大學(xué)出版社,2011,前言

[5]龔沛曾.Visual Basic.NET程序設(shè)計(jì)教程(第2版)[M],高等教育出版社,2005,17

猜你喜歡
數(shù)據(jù)庫語言
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
數(shù)據(jù)庫
多向度交往對語言磨蝕的補(bǔ)正之道
數(shù)據(jù)庫
累積動(dòng)態(tài)分析下的同聲傳譯語言壓縮
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
我有我語言
主站蜘蛛池模板: 国产簧片免费在线播放| 亚洲中文字幕久久无码精品A| 噜噜噜综合亚洲| 国产一区二区三区夜色| 毛片视频网址| 国产高颜值露脸在线观看| 在线欧美a| 国产精品v欧美| 九九香蕉视频| 91精品网站| 日韩av在线直播| 免费啪啪网址| 亚洲中文字幕在线一区播放| 91po国产在线精品免费观看| 亚洲综合日韩精品| 天天综合网色| 国产精品深爱在线| 免费99精品国产自在现线| 国内视频精品| 波多野结衣无码中文字幕在线观看一区二区| WWW丫丫国产成人精品| 亚洲无码高清视频在线观看| 超清无码熟妇人妻AV在线绿巨人 | 中文字幕在线看| 啪啪啪亚洲无码| 久久精品午夜视频| 成人福利在线看| 九一九色国产| 亚洲一级毛片免费看| 99这里只有精品免费视频| 国产精品理论片| 亚洲系列无码专区偷窥无码| 欧美日韩第三页| 婷婷六月激情综合一区| 18禁黄无遮挡免费动漫网站| 成人中文字幕在线| 91亚洲精品第一| 手机在线国产精品| 亚洲色图欧美视频| 国产杨幂丝袜av在线播放| 久久性妇女精品免费| 91无码人妻精品一区二区蜜桃| 欧美黄网站免费观看| 日本国产精品| 日本五区在线不卡精品| 亚洲一道AV无码午夜福利| 男女性午夜福利网站| 亚洲AV无码久久天堂| 99热这里只有精品在线播放| 国产成人精品高清不卡在线| 成人免费网站久久久| 制服无码网站| 熟女日韩精品2区| 91精品视频网站| 激情综合网激情综合| 久久精品人妻中文系列| 99这里精品| 欧美 国产 人人视频| 一级一级一片免费| 99精品欧美一区| 国产91熟女高潮一区二区| 国产成人精彩在线视频50| 色成人亚洲| 强乱中文字幕在线播放不卡| 国产高清免费午夜在线视频| 伊人色天堂| 在线播放精品一区二区啪视频| 国产黄色片在线看| 99久视频| 国产精品成人啪精品视频| 国产一区二区视频在线| 成人av专区精品无码国产| 亚洲狠狠婷婷综合久久久久| 日韩视频免费| 日韩在线欧美在线| 欧美一级在线| 日本一本正道综合久久dvd| 国产毛片久久国产| 国产xx在线观看| 国产超碰一区二区三区| 欧美国产日韩在线| 国产第八页|