馬玉春,吳淑婷,汪文彬
(海南熱帶海洋學院計算機科學與技術(shù)學院,海南 三亞 572022)
面向?qū)ο缶幊淌且环N直觀和結(jié)構(gòu)簡單的程序設(shè)計方法,比較符合人類認識現(xiàn)實世界的思維方式。一般將一個系統(tǒng)分解為若干個對象,這些對象是相對獨立的,但又可以相互配合、連接和協(xié)調(diào),從而共同完成整個系統(tǒng)所要實現(xiàn)的功能和任務(wù)[1]。計算機相關(guān)專業(yè)的學生在學完面向過程的“C語言程序設(shè)計”課程后,要實現(xiàn)面向?qū)ο蟮乃季S習慣的轉(zhuǎn)變存在一定的困難。
MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,采用SQL語言訪問數(shù)據(jù)庫,通用性比較強,目前使用該數(shù)據(jù)庫的主流公司與組織有Facebook、Github、YouTube、Twitter、PayPal、諾基亞、Spotify、Netflix等。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版(免費)和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫,高校也經(jīng)常采用此數(shù)據(jù)庫系統(tǒng)用于教學[2]。文獻[3]在Visual Basic Express 2010開發(fā)環(huán)境下,基于.NET框架實現(xiàn)了一個Access數(shù)據(jù)庫類。MySQL數(shù)據(jù)庫支持遠程訪問,涉及用戶名、密碼、端口號和服務(wù)器名稱(或IP地址)等,更適合屬性與方法的表達,因而,本文在文獻[3]的基礎(chǔ)之上,采用最新版的Visual Studio Community 2019開發(fā)環(huán)境和新版的.NET框架,使用 Visual Basic語言實現(xiàn)MySQL數(shù)據(jù)庫類MySqlHelper,進行數(shù)據(jù)庫對象的初始化,實現(xiàn)查找、刪除、增加和修改記錄操作,培養(yǎng)學生的面向?qū)ο笏季S。
MySQL數(shù)據(jù)庫驅(qū)動程序不是.NET框架的一部分,Visual Basic無法直接操作,需要下載并安裝文獻[4]中所列的“Connector/NET”驅(qū)動程序,這里選擇8.0.19版的 Windows安裝程序,安裝后的路徑如下所示,該驅(qū)動程序需要使用4.5.2版的.NET框架[2]。
C:Program Files(x86)MySQLMySQL Connector Net 8.0.19Assembliesv4.5.2
新建的VB項目需要添加對MySql.Data.dll 的引用,并在項目中分別導(dǎo)入(Imports)MySql.Data和MySql.Data.MySqlClient兩個類,這樣才可以使用ADO.NET操作MySQL 數(shù)據(jù)庫。ADO.NET模型中的DataSet是數(shù)據(jù)的內(nèi)存駐留表示形式,它提供了獨立于數(shù)據(jù)源的一致關(guān)系編程模型[5]。DataSet表示整個數(shù)據(jù)集,其中包含表、約束和表之間的關(guān)系。由于DataSet獨立于數(shù)據(jù)源,因此DataSet可以包含應(yīng)用程序本地的數(shù)據(jù),也可以包含來自多個數(shù)據(jù)源的數(shù)據(jù)。與現(xiàn)有數(shù)據(jù)源的交互通過DataAdapter適配器來控制。DataSet、DataAdapter與數(shù)據(jù)源之間的關(guān)系如圖1所示。
圖1 DataSet、DataAdapter 和數(shù)據(jù)源之間的關(guān)系
MySqlHelper類提供的外部可見的只讀屬性如表1所示,這些屬性可以方便地用于數(shù)據(jù)庫操作以及在 DataGridView控件中使用,將數(shù)據(jù)記錄以表格的形式進行瀏覽和修改。
表1 MySqlHelper 類的可見屬性
ds是一個只讀屬性,表示當前的DataSet對象,其內(nèi)部定義為DataSet對象_ds. ds屬性對象有一個布爾屬性 HasChanges,用來判斷數(shù)據(jù)是否變化,該屬性可用于自動將ds中變化的數(shù)據(jù)保存到數(shù)據(jù)源。
dt是一個只讀屬性,包含在ds對象中,表示當前的DataTable對象,其內(nèi)部定義為DataTable對象_dt,該屬性對象可用于將數(shù)據(jù)表綁定到DataGridView控件,從而實現(xiàn)數(shù)據(jù)表的瀏覽與修改。
nTables是一個只讀屬性,表示表的數(shù)目。這里一次查詢一張表,因而,正常情況下,該屬性為1;否則,該屬性為0.該屬性對應(yīng)的內(nèi)部變量為Integer類型的_nTables變量。
對數(shù)據(jù)庫進行編程操作,如果不知道數(shù)據(jù)表的記錄數(shù),往往比較困難。nRecords是一個只讀屬性,返回數(shù)據(jù)表的記錄數(shù)。其實,所謂的記錄數(shù)只是數(shù)據(jù)表的行數(shù),因而,調(diào)用了Rows集合的Count屬性。如果數(shù)據(jù)表的數(shù)目為0,則直接返回0即可。nRecords屬性對應(yīng)的內(nèi)部變量為Integer類型的_nRecords變量。
在圖1中,MySQL數(shù)據(jù)庫使用MySqlDataAdapter適配器建立D a t a S e t 與數(shù)據(jù)源之間的連接,在對MySqlDataAdapter對象進行初始化的時候,需要提供查詢字符串和連接字符串。查詢字符串是一個SELECT語句,告知查詢哪一張表,以及如何查詢該表;連接字符串根據(jù)提供的MySQL數(shù)據(jù)庫服務(wù)器的用戶名、密碼、服務(wù)器名稱或IP地址、數(shù)據(jù)庫名稱等生成的字符串,私有方法GetConnectionString實現(xiàn)這一功能。為了增加MySqlHelper數(shù)據(jù)庫類的通用性,允許客戶端從服務(wù)器獲取公鑰,因而參數(shù)AllowPublicKeyRetrieval設(shè)置為True,不使用SSL連接,因而SslMode設(shè)置為MySqlSslMode.None.如果需要增加安全性,則可以修改這兩個參數(shù),并對服務(wù)器進行相關(guān)配置。
產(chǎn)生連接字符串的私有方法 GetConnectionString 所使用的參數(shù)大部分來自構(gòu)造函數(shù)。為了方便高效開發(fā)應(yīng)用程序,除了數(shù)據(jù)庫名稱 dbName 參數(shù)外,其它所有參數(shù)都有缺省值。
公共方法FillData將數(shù)據(jù)源中的數(shù)據(jù)表填充到私有對象_ds和_dt,從而得到表1中所示的外部可見的屬性對象ds和dt.如果在填充數(shù)據(jù)的過程中拋出異常,則將異常信息寫入私有字符串變量_strErrorAdapter中,該變量對應(yīng)表1中的ErrorAdapter屬性。有了數(shù)據(jù)表DataTable對象dt,即可簡單地通過dt對象對二維關(guān)系表進行修改、添加和刪除操作,將在第6節(jié)給出應(yīng)用實例。FillData方法中的私有整型變量_nTables對應(yīng)表1中的nTables屬性。
對dt的操作僅限于內(nèi)存,公有方法WriteData將內(nèi)存輸入重新寫入數(shù)據(jù)源。調(diào)用DataAdapter的Update方法可以將DataSet中的更改解析回數(shù)據(jù)源。當調(diào)用Update方法時,DataAdapter會分析已做的更改并執(zhí)行相應(yīng)的命令(INSERT、UPDATE或DELETE)。當DataAdapter遇到對DataRow所做的更改時,它將使用InsertCommand、UpdateCommand或DeleteCommand來處理該更改。這樣,程序員就可以通過在設(shè)計時指定命令語法并在可能時通過使用存儲過程來盡量提高ADO.NET應(yīng)用程序的性能[5]。
MySQL數(shù)據(jù)庫類MySqlHelper將用戶名、密碼、服務(wù)器與端口及數(shù)據(jù)庫名稱與數(shù)據(jù)表等諸多屬性組合起來,并可以方便地操作數(shù)據(jù)表,更新數(shù)據(jù)源。如下第(1)條語句使用缺省參數(shù),傳入數(shù)據(jù)庫名稱“dbAlarm”生成MySqlHelper對象myData,第(2)條語句通過strQuery參數(shù)選擇一張需要操作的數(shù)據(jù)表,第(3)條語句即可通過dt屬性增加一條空的記錄,第(4)條語句刪除第I條記錄,第(5)條語句更新第I條記錄的“aTime”字段值,最后一條語句將所有數(shù)據(jù)變化寫入數(shù)據(jù)源。
Visual Basic是快速桌面語言,與MySqlHelper數(shù)據(jù)庫類相結(jié)合,可以讓學生體會類的設(shè)計方法與應(yīng)用,也可以加深對數(shù)據(jù)庫的理解及熟悉對MySQL數(shù)據(jù)庫的操作,從而為進一步開發(fā)基于MySQL數(shù)據(jù)庫的Web應(yīng)用程序打下基礎(chǔ)。
MySQL數(shù)據(jù)庫在Web應(yīng)用程序中使用較多,在國內(nèi)外許多著名網(wǎng)站中都得到了應(yīng)用。本文使用最新版的Visual Studio Community 2019免費開發(fā)環(huán)境,基于.NET框架實現(xiàn)了一個Visual Basic數(shù)據(jù)庫類,可以方便地對MySQL數(shù)據(jù)庫進行操作,從而輔助桌面應(yīng)用程序的開發(fā)。該數(shù)據(jù)庫類可以作為一個面向?qū)ο蟮慕虒W案例,也可直接用于工程項目。