《Visual Basic NET程序設(shè)計(jì)》課件第6章_第1頁
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第2頁
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第3頁
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第4頁
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章數(shù)據(jù)庫的開發(fā)

6.1數(shù)據(jù)庫基本知識6.2ADO.NET組件6.3數(shù)據(jù)庫開發(fā)實(shí)例習(xí)題實(shí)驗(yàn)六數(shù)據(jù)庫開發(fā)

6.1數(shù)據(jù)庫基本知識

數(shù)據(jù)庫(Database,DB),顧名思義就是數(shù)據(jù)的集合。數(shù)據(jù)庫是把一些相互間有一定聯(lián)系的數(shù)據(jù)按照一定的數(shù)據(jù)模型組織起來,例如,關(guān)系數(shù)據(jù)庫就是把數(shù)據(jù)庫中的數(shù)據(jù)按照關(guān)系數(shù)據(jù)模型組織起來。數(shù)據(jù)庫具有較小的數(shù)據(jù)冗余,較高的數(shù)據(jù)獨(dú)立性和安全性,并允許許多個(gè)用戶并發(fā)地訪問數(shù)據(jù)庫。數(shù)據(jù)庫管理系統(tǒng)(DataBaseManagementSystem,DBMS)則是對數(shù)據(jù)進(jìn)行有效管理的計(jì)算機(jī)軟件,使用這一軟件能方便地定義和操縱數(shù)據(jù),維護(hù)數(shù)據(jù)的安全性和完整性,對多用戶訪問數(shù)據(jù)庫的并發(fā)操作進(jìn)行控制并對數(shù)據(jù)庫進(jìn)行維護(hù)。一個(gè)完整的數(shù)據(jù)庫系統(tǒng)由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、計(jì)算機(jī)軟件和硬件系統(tǒng)及數(shù)據(jù)庫管理員(DataBaseAdministrator,DBA)組成。數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)的核心,數(shù)據(jù)庫的一切操作包括數(shù)據(jù)庫的建立,數(shù)據(jù)的檢索、修改、刪除操作以及對數(shù)據(jù)的各種控制,都是通過DBMS來實(shí)現(xiàn)的。

數(shù)據(jù)庫中常用的數(shù)據(jù)模型包括層次模型、網(wǎng)狀模型和關(guān)系模型。其中,20世紀(jì)60年代末期提出的關(guān)系模型具有簡單靈活、易學(xué)易懂并且其理論建立在雄厚的數(shù)學(xué)基礎(chǔ)之上等特點(diǎn),目前廣泛使用的數(shù)據(jù)庫軟件都是基于關(guān)系模型的關(guān)系數(shù)據(jù)庫管理系統(tǒng)?,F(xiàn)實(shí)世界由實(shí)體(Entity)和實(shí)體之間的聯(lián)系(Relationship)構(gòu)成。所謂實(shí)體,是指現(xiàn)實(shí)世界中客觀存在且可相互區(qū)分的事物。所謂聯(lián)系,是指實(shí)體之間的關(guān)系,即實(shí)體之間的對應(yīng)關(guān)系。通過聯(lián)系就可以利用一個(gè)實(shí)體的信息來查找與此相關(guān)的另一個(gè)實(shí)體的信息。

關(guān)系模型中的數(shù)據(jù)結(jié)構(gòu)只有關(guān)系(即表)這一種。表的每一行描述實(shí)體的一個(gè)實(shí)例,每一列則描述實(shí)體的一個(gè)特征或?qū)傩?。通常所說的關(guān)系數(shù)據(jù)庫是由相關(guān)的多張表組成的,表與表之間的聯(lián)系對應(yīng)實(shí)體間的聯(lián)系。在計(jì)算機(jī)中,表的一行稱為記錄,一列稱為字段。表6-1描述的圖書信息表由書號、書名、作者等6個(gè)字段構(gòu)成。創(chuàng)建數(shù)據(jù)庫時(shí)需做兩件事:首先利用DBMS創(chuàng)建數(shù)據(jù)庫;然后再創(chuàng)建其中的數(shù)據(jù)表(一個(gè)數(shù)據(jù)庫可以包含多個(gè)數(shù)據(jù)表),即定義數(shù)據(jù)表的結(jié)構(gòu),也就是定義一個(gè)數(shù)據(jù)表中的字段。至此數(shù)據(jù)庫的結(jié)構(gòu)定義完畢,接下來的工作就是往數(shù)據(jù)庫中裝入數(shù)據(jù),即往數(shù)據(jù)庫中輸入記錄。

【案例6-1】

圖書管理系統(tǒng)。

使用MicrosoftAccess2000作為數(shù)據(jù)庫管理系統(tǒng)來創(chuàng)建名為Tsgl的圖書管理數(shù)據(jù)庫,包含一個(gè)名為tushu的圖書信息表,如表6-1所示。此數(shù)據(jù)表有6個(gè)字段,分別為書號、書名、作者、出版社、出版日期和單價(jià)。

【技能目標(biāo)】

(1)啟動MicrosoftAccess2000。

(2)新建數(shù)據(jù)庫和數(shù)據(jù)表。

(3)了解數(shù)據(jù)庫管理系統(tǒng)(DBMS)及其基本操作。

【操作要點(diǎn)與步驟】

(1)啟動Access,打開如圖6-1所示的新建數(shù)據(jù)庫窗體。選擇“空Access數(shù)據(jù)庫”單選按鈕,單擊“確定”按鈕,輸入數(shù)據(jù)庫文件名稱Tsgl.mdb,并選擇數(shù)據(jù)庫文件存放的目錄,然后單擊“創(chuàng)建”按鈕,打開如圖6-2所示的“Tsgl:數(shù)據(jù)庫”窗體。至此,就創(chuàng)建了一個(gè)名為Tsgl的數(shù)據(jù)庫。圖6-1“新建數(shù)據(jù)庫”窗體圖6-2“Tsgl:數(shù)據(jù)庫”窗體

(2)創(chuàng)建數(shù)據(jù)庫中的數(shù)據(jù)表。雙擊“使用設(shè)計(jì)器創(chuàng)建表”命令,彈出數(shù)據(jù)表設(shè)計(jì)窗體。依次輸入各字段的名稱,并指定字段的數(shù)據(jù)類型。另外,為了提高效率,每個(gè)數(shù)據(jù)表都應(yīng)該有一個(gè)主鍵字段,主鍵字段定義了表中記錄的唯一性。將“書號”字段定義為表的主鍵字段。至此,就可得到如圖6-3所示的效果。從“文件”菜單中選擇“保存”命令,保存該表,命名為tushu,并關(guān)閉tushu表的設(shè)計(jì)窗體。此時(shí),在“Tsgl:數(shù)據(jù)庫”窗體中顯示已建立的tushu表。若數(shù)據(jù)庫中包含多個(gè)數(shù)據(jù)表,則需要重復(fù)上述過程。圖6-3數(shù)據(jù)表設(shè)計(jì)窗口

(3)往數(shù)據(jù)表中輸入數(shù)據(jù)。具體方法是雙擊tushu表,打開如圖6-4所示的窗體,輸入記錄內(nèi)容,并單擊“保存”按鈕。圖6-4在新表中輸入數(shù)據(jù)

【相關(guān)知識】

知識點(diǎn)6-1-1

SQL簡介

SQL是英文StructuredQueryLanguage的縮寫,意思為結(jié)構(gòu)化查詢語言,它被作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言,可以用來實(shí)現(xiàn)各種各樣的數(shù)據(jù)庫操作,例如數(shù)據(jù)定義、數(shù)據(jù)查詢、插入記錄、刪除記錄、修改記錄以及數(shù)據(jù)庫控制。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(如Oracle、Sybase、MicrosoftSQLServer、Access等)都采用SQL標(biāo)準(zhǔn),并且對SQL進(jìn)行了擴(kuò)展。

下面簡單介紹SQL中的基本語句。

1.INSERT語句

利用INSERT語句可以向數(shù)據(jù)庫表中插入或添加新的記錄。INSERT語句的書寫格式如下:

?INSERTINTO表名[(字段名1[,字段名2,…])]VALUES(表達(dá)式1[,表達(dá)式2,…])

上述語句的功能是:向“表名”指定的表中插入一條記錄。其中,括號中列出將要添加新值的字段名;VALUES子句中列出該記錄的各字段值,并且各字段值的順序應(yīng)與指定的字段名順序一致,即“表達(dá)式1”的值作為“字段名1”中的數(shù)據(jù),“表達(dá)式2”的值作為“字段名2”中的數(shù)據(jù),以此類推。如果要給記錄的所有字段輸入值,則表名后面的字段名列表可以省略,但插入數(shù)據(jù)的類型必須與表中相應(yīng)字段的數(shù)據(jù)類型一致。若只需要插入表中某些字段的數(shù)據(jù),則需列出要插入數(shù)據(jù)的字段名,并給出相應(yīng)的值。例如,向tushu表中插入一條記錄,并為書名、作者和出版社字段賦值,該語句可寫為

INSERTINTOtushu(書名,作者,出版社)VALUES(“細(xì)胞生物學(xué)”,“王金發(fā)”,“科學(xué)出版社”)

2.DELETE語句

當(dāng)表中的記錄已經(jīng)失效時(shí),應(yīng)使用DELETE語句將其刪除。該語句的格式如下:

DELETEFROM表名[WHERE條件]

上述語句的功能是:從由“表名”指定的表中刪除滿足給定“條件”的記錄,當(dāng)省略WHERE子句時(shí),表示刪除表中的全部記錄。

例如,從tushu表中刪除所有科學(xué)出版社出版的圖書,該語句可寫為

DELETEFROMtushuWHERE出版社="科學(xué)出版社"

3.UPDATE語句

UPDATE語句的格式為

UPDATE表名SET字段名1=表達(dá)式1[,字段名2=表達(dá)式2…][WHERE條件]

上述語句的功能是:對指定表中滿足“條件”的記錄進(jìn)行修改,若無WHERE子句,則修改表中的所有記錄。修改記錄時(shí)以“表達(dá)式1”的值替換“字段名1”中的值,以“表達(dá)式2”的值替換“字段名2”中的值,以此類推。

例如,將tushu表中書名為“高級語言C++程序設(shè)計(jì)”的單價(jià)增加15元,其修改語句為

UPDATEtushuSET單價(jià)=單價(jià)+15WHERE書名="高級語言C++程序設(shè)計(jì)"

4.SELECT語句

SELECT是一個(gè)功能強(qiáng)大的數(shù)據(jù)查詢語句,它由多個(gè)子句組成,通過這些子句可以實(shí)現(xiàn)對數(shù)據(jù)庫的各種查詢。該語句最基本的書寫格式如下:

?SELECT字段名列表FROM表名[WHERE條件]

其中,“字段名列表”是若干個(gè)字段的列表,字段名之間用逗號分開。該語句的功能是從指定的表中查詢滿足“條件”的記錄,查詢結(jié)果中包含由“字段名列表”列出的字段信息。如果省略WHERE子句,則表示顯示所有記錄。例如:

SELECT書名,作者,單價(jià)FROMtushuWHERE出版者="科學(xué)出版社"

其作用是從tushu表中查詢科學(xué)出版社的書籍,并列出其書名、作者和單價(jià)。需要說明的是,SELECT語句的功能非常強(qiáng)大,要了解該語句的其他用法,讀者可參閱《數(shù)據(jù)庫系統(tǒng)概論》等書籍。

知識點(diǎn)6-1-2

VB.NET對數(shù)據(jù)庫開發(fā)的支持

數(shù)據(jù)庫開發(fā)包括數(shù)據(jù)庫設(shè)計(jì)和開發(fā)訪問數(shù)據(jù)庫數(shù)據(jù)的應(yīng)用程序。前者可以用數(shù)據(jù)庫管理系統(tǒng)來實(shí)現(xiàn);后者則可以使用各種軟件開發(fā)工具來完成,如VB.NET等。雖然數(shù)據(jù)庫中的數(shù)據(jù)在磁盤上也體現(xiàn)為文件,但是這些文件的管理是由數(shù)據(jù)庫管理系統(tǒng)來完成的。因此在設(shè)計(jì)數(shù)據(jù)庫應(yīng)用程序時(shí),不能像訪問文件那樣直接讀取數(shù)據(jù),而是需要借助于某種編程接口才能訪問數(shù)據(jù)庫中的數(shù)據(jù)。美國微軟公司提出的ODBC(OpenDataBaseConnectivity,開放數(shù)據(jù)庫互聯(lián))接口能以統(tǒng)一的方式訪問數(shù)據(jù)。然而,由于ODBC具有效率較低,使用具有一定的局限性等缺點(diǎn),因此,隨著技術(shù)的發(fā)展,出現(xiàn)了ADO(ActiveXDataObjects,活動數(shù)據(jù)對象)技術(shù)。在推出VisualStudio.NET的同時(shí),微軟提出了一種新的數(shù)據(jù)訪問技術(shù),即ADO.NET。ADO.NET滿足了3個(gè)重要需求:斷開的數(shù)據(jù)訪問模型(這對Web環(huán)境至關(guān)重要),與XML的集成以及與.NET框架的無縫集成。因此,利用VB.NET開發(fā)數(shù)據(jù)庫應(yīng)用程序時(shí)通常優(yōu)先選擇ADO.NET,以實(shí)現(xiàn)數(shù)據(jù)的訪問。

ADO.NET作為一種數(shù)據(jù)訪問技術(shù),是?.NET技術(shù)體系的固有部分,微軟已經(jīng)將ADO.NET技術(shù)的絕大部分封裝在類和組件中。因此,可以直接使用這些類的對象來訪問數(shù)據(jù)庫中的數(shù)據(jù)。

6.2ADO.NET組件

ADO.NET是為?.NET框架創(chuàng)建的,是對ADO對象模型的擴(kuò)充。ADO.NET提供了一組數(shù)據(jù)訪問服務(wù)的類,用于實(shí)現(xiàn)對不同數(shù)據(jù)源的一致訪問,例如MicrosoftSQLServer數(shù)據(jù)源、Oracle數(shù)據(jù)源,以及通過OLEDB和XML公開的數(shù)據(jù)源等。

設(shè)計(jì)ADO.NET組件的目的是從數(shù)據(jù)操作中分解出數(shù)據(jù)訪問,通過.NET數(shù)據(jù)提供程序和DataSet組件實(shí)現(xiàn)此功能。其中,.NET數(shù)據(jù)提供程序是數(shù)據(jù)提供者,包括Connection、Command、DataReader和DataAdapter等對象;DataSet組件用于實(shí)現(xiàn)對結(jié)果數(shù)據(jù)的存儲,以獨(dú)立于數(shù)據(jù)源的數(shù)據(jù)訪問。圖6-5所示為ADO.NET組件的結(jié)構(gòu)。圖6-5ADO.NET組件的結(jié)構(gòu)

1.DataSet數(shù)據(jù)集

DataSet是ADO.NET結(jié)構(gòu)的核心組件,其作用在于實(shí)現(xiàn)獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問。DataSet在任何數(shù)據(jù)源中檢索后得到數(shù)據(jù)并且將其保存在緩存中,它包含表以及所有表的約束、索引和關(guān)系。因此,也可以把它看做是內(nèi)存中的一個(gè)小型關(guān)系數(shù)據(jù)庫。

一個(gè)DataSet對象包含一組DataTable對象和DataRelation對象,其中每個(gè)DataTable對象由一組DataRow、DataColumn和Constraint對象組成。這些對象的含義如下:

●?DataTable對象:代表數(shù)據(jù)表。

●?DataRelation對象:代表兩個(gè)數(shù)據(jù)表之間的關(guān)系?!?DataRow對象:代表DataTable中的數(shù)據(jù)行,即記錄。

●?DataColumn對象:代表DataTable中的數(shù)據(jù)列,包括列的名稱、類型和屬性。

●?Constraint對象:代表DataTable中主鍵(或稱主碼)、外鍵(或稱外碼)等約束信息。

除了以上對象以外,DataSet中還包含DataTableCollection和DataRelationCollection等集合對象。

DataRow方法只能生成一個(gè)DataRow對象,并不能向表中添加新的行。

2.NETFramework數(shù)據(jù)提供程序

ADO.NET結(jié)構(gòu)的另一個(gè)核心元素是?.NET數(shù)據(jù)提供程序,設(shè)計(jì)該組件的目的是實(shí)現(xiàn)數(shù)據(jù)操作和對數(shù)據(jù)的快速、只讀訪問。數(shù)據(jù)提供程序在應(yīng)用程序和數(shù)據(jù)源之間起著橋梁的作用。數(shù)據(jù)提供程序用于從數(shù)據(jù)源中檢索數(shù)據(jù)并且保證對數(shù)據(jù)的更改與數(shù)據(jù)源一致。常用的數(shù)據(jù)提供程序包括SQLServer.NETFramework數(shù)據(jù)提供程序和OLEDB.NETFramework數(shù)據(jù)提供程序。表6-2列出了.NET框架中包括的?.NET數(shù)據(jù)提供程序。

1)?SQLServer.NETFramework數(shù)據(jù)提供程序

SQLServer.NETFramework數(shù)據(jù)提供程序使用自身的協(xié)議與SQLServer進(jìn)行通信??梢灾苯釉L問SQLServer而不用添加OLEDB或開放式數(shù)據(jù)庫連接(ODBC)層,因此它的實(shí)現(xiàn)更加精簡,并且具有良好的性能。SQLServer.NETFramework數(shù)據(jù)提供程序類位于System.Data.SqlClient命名空間。其引入代碼如下:

ImportsSystem.Data.SqlClient

需要說明的是,若要使用SQLServer.NETFramework數(shù)據(jù)提供程序,則必須具有對MicrosoftSQLServer7.0或更高版本的訪問權(quán);對于MicrosoftSQLServer的較早版本,可使用SQLServerOLEDB數(shù)據(jù)源進(jìn)行通信。

2)?OLEDB.NETFramework數(shù)據(jù)提供程序

OLEDB.NETFramework數(shù)據(jù)提供程序通過OLEDB服務(wù)組件和數(shù)據(jù)源的OLEDB提供程序與OLEDB數(shù)據(jù)源進(jìn)行通信。OLEDB.NETFramework數(shù)據(jù)提供程序類位于System.Data.OleDb命名空間。其引入代碼如下:

ImportsSystem.Data.OleDb

3.ADO.NET對象及組件

.NET數(shù)據(jù)提供程序包含4個(gè)核心元素:Connection、Command、DataReader和DataAdapter對象。這些對象及其功能如表6-3所示。

Connection對象提供與數(shù)據(jù)源的連接;Command對象能夠訪問用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令;DataReader用于從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流;DataAdapter提供連接DataSet對象和數(shù)據(jù)源的橋梁。DataAdapter使用Command對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使對DataSet中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。

1)?Connection對象

在對數(shù)據(jù)源進(jìn)行操作之前,首先需要建立與數(shù)據(jù)源的連接??梢允褂肅onnection對象來創(chuàng)建連接對象。

Connection對象可以和DataAdapter對象一起創(chuàng)建,即從“工具箱”中拖放DataAdapter組件到組件區(qū)時(shí),創(chuàng)建了一個(gè)DataAdapter對象,同時(shí)也創(chuàng)建了一個(gè)Connection對象。

根據(jù)所用的?.NETFramework數(shù)據(jù)提供程序的不同,連接對象一般分為SqlConnection對象和OleDbConnection對象。其中,連接SQLServer7.0以上版本的數(shù)據(jù)庫時(shí),需使用SqlConnection對象;要連接SQLServer7.0以前的數(shù)據(jù)庫或連接OLEDB數(shù)據(jù)源時(shí),需要使用OleDbConnection對象。連接對象最重要的屬性是ConnectionString,該屬性用來設(shè)置連接字符串。其中,SqlConnection對象的典型連接字符串如下:

“DataSource=MySQLServer;InitialCatalog=Northwind;UserID=sa;Password=”“;”

而OleDbConnection對象的典型連接字符串如下:

“Provider=SQLOLEDB;DataSource=MySQLServer;InitialCataLog=Northwind;

UserID=sa;Password=”“;”

其中:

●?DataSource指明數(shù)據(jù)庫服務(wù)器的位置可以是電腦名稱、IP地址、localhost(代表使用本機(jī)作服務(wù)器)等。

●InitialCatalog指明要連接的數(shù)據(jù)庫名稱。

●UserID和Password指明登錄數(shù)據(jù)庫服務(wù)器的賬戶和密碼。●Provider指定OLEDBProvider。例如MSDASQL為ODBC的OLEDBProvider,Microsoft.Jet.OLEDB.4.0為Access的OLEDBProvider,SQLOLEDB為SQLServer的OLEDBProvider。

2)?Command對象

在與數(shù)據(jù)源建立連接之后,可使用Command對象來執(zhí)行對數(shù)據(jù)源的查詢、插入、刪除、修改等操作。具體操作可以使用SQL語句,也可以使用存儲過程。同樣,根據(jù)所用的?.NETFramework數(shù)據(jù)提供程序的不同,Command對象一般分為SqlCommand對象和OleDbCommand對象。

Command對象的常用屬性包括以下幾種:

●?CommandType屬性:用來選擇Command對象要執(zhí)行的命令類型。該屬性可以取Text、StoreProcedure和TableDirect三種不同的值。

●?CommandText屬性:根據(jù)CommandType屬性的取值,設(shè)置要執(zhí)行的SQL命令、存儲過程名或表名。

●?Connection:用來設(shè)置要使用的Connection對象名。

3)?DataReader對象

DataReader對象是一個(gè)簡單的數(shù)據(jù)集,可實(shí)現(xiàn)從數(shù)據(jù)源中檢索數(shù)據(jù),并將檢索結(jié)果保存為快速、只向前、只讀的數(shù)據(jù)流。根據(jù)所用的?.NETFramework數(shù)據(jù)提供程序的不同,DataReader分為SqlDataReader和OleDbDataReader。DataReader對象可通過Command對象的ExeculteReader方法從數(shù)據(jù)源中檢索數(shù)據(jù)來創(chuàng)建。

4)?DataAdaper對象

DataAdaper對象的主要功能是從數(shù)據(jù)源中檢索數(shù)據(jù),填充DataSet對象中的表,把用戶對DataSet對象的更改寫入到數(shù)據(jù)源。根據(jù)所用的.NETFramework數(shù)據(jù)提供程序的不同,DataAdaper對象分為SqlDataAdapter和OleDbDataAdapter。DataAdapter對象的常用屬性包括InsertCommand、DeleteCommand、SelectCommand和UpdataCommand,這些屬性用來獲取SQL語句或存儲過程,分別實(shí)現(xiàn)在數(shù)據(jù)源中插入新記錄、刪除記錄、選擇記錄和修改記錄。通常將這些屬性設(shè)置為某個(gè)Command對象的名稱,由該Command對象執(zhí)行相應(yīng)的SQL語句。

DataAdapter對象的常用方法有以下幾種:

●?Fill方法。其功能是從數(shù)據(jù)源中提取數(shù)據(jù)以填充數(shù)據(jù)集。該方法有多種書寫格式,其常用的一種格式如下:

PublicFunctionFill(ByValdataSetasDataSet,ByValsrcTableasString)AsInteger

上述語句的功能是:從參數(shù)srcTable指定的表中提取數(shù)據(jù)以填充參數(shù)dataSet指定的數(shù)據(jù)集,其結(jié)果返回dataSet中成功添加或刷新的記錄個(gè)數(shù)。

Fill方法具有自動打開連接并在操作結(jié)束后立即關(guān)閉連接的功能。

●?Update方法。該方法主要用于修改數(shù)據(jù)源。該方法也有多種書寫格式,其常用的一種格式如下:

PublicOverridableFunctionUpdate(ByValdataSetasDataSet)AsInteger

上述語句的功能是:把對參數(shù)dataSet指定的數(shù)據(jù)集進(jìn)行的插入、更新或刪除操作更新到數(shù)據(jù)源中。這種格式通常用于數(shù)據(jù)集中只有一個(gè)表的情況,其結(jié)果返回dataSet中被成功更新的記錄個(gè)數(shù)。

5)?DataSet對象

DataSet對象的組成已在前面做過介紹,下面僅介紹DataSet對象的填充和訪問,以及如何利用DataSet對象更新數(shù)據(jù)源。

數(shù)據(jù)集是容器,因此需要用數(shù)據(jù)填充它。DataSet對象的填充可以通過調(diào)用DataAdapter對象的Fill方法來實(shí)現(xiàn)。該方法使得DataAdapter對象執(zhí)行其SelectCommand屬性中設(shè)置的SQL語句或存儲過程,然后將結(jié)果填充到數(shù)據(jù)集中。

訪問DataSet對象中的數(shù)據(jù),如訪問數(shù)據(jù)集中某數(shù)據(jù)表的某行某列數(shù)據(jù),可使用如下方法:

DataSet對象名.TableS["數(shù)據(jù)表名"].Rows[n]["列名"]上述語句的功能是:訪問“DataSet對象名”指定的數(shù)據(jù)集中“數(shù)據(jù)表名”指定的數(shù)據(jù)表的第n+1行中由“列名”確定的列。n代表行號,且數(shù)據(jù)表中行號從0開始計(jì)。以下語句顯示了如何訪問名為dsBook的數(shù)據(jù)集中tushu表第1行的“書名”列。

dsBook.Tables[“tushu”].Rows[0][“書名”]

雖然可以訪問DataSet對象中的數(shù)據(jù),并對之進(jìn)行更改,但是數(shù)據(jù)更改實(shí)際上并沒有寫入到數(shù)據(jù)源中。要將數(shù)據(jù)的更改傳遞給數(shù)據(jù)源,需要調(diào)用DataAdapter對象的Update方法來實(shí)現(xiàn)。

6)?ADO?.NET數(shù)據(jù)組件

在VB?.NET中訪問數(shù)據(jù)庫,既可以通過上述ADO?.NET對象編程實(shí)現(xiàn),也可以使用ADO?.NET提供的數(shù)據(jù)組件實(shí)現(xiàn)。使用ADO?.NET數(shù)據(jù)組件訪問數(shù)據(jù)只需將它們拖動到窗體上,根據(jù)向?qū)渲孟鄳?yīng)屬性。

和DataSet、Connection、Command、DataAdapter對象相對應(yīng),ADO?.NET數(shù)據(jù)組件包括DataSet、Connection、Command、DataAdapter等。在工具箱的“數(shù)據(jù)”工具組中可以查看到這些組件,如圖6-6所示。

根據(jù)所用的?.NETFramework數(shù)據(jù)提供程序的不同,數(shù)據(jù)組件分為兩組:SqlDataAdaper、SqlConnection、SqlCommand和OleDbDataAdaper、OleDbConnection、OleDbCommand,分別對應(yīng)于SQLServer.NETFramework和OLEDB?.NETFramework兩個(gè)數(shù)據(jù)提供程序提供的不同數(shù)據(jù)源。圖6-6ADO.NET提供的數(shù)據(jù)組件由于數(shù)據(jù)組件與數(shù)據(jù)訪問對象的屬性、方法和作用均相同,因此不再贅述。

4.開發(fā)數(shù)據(jù)庫應(yīng)用程序的一般步驟

使用ADO?.NET開發(fā)數(shù)據(jù)庫應(yīng)用程序的一般步驟如下:

(1)使用Connection對象建立與數(shù)據(jù)源的連接。

(2)使用Command對象執(zhí)行對數(shù)據(jù)源的操作命令,通常使用SQL命令。

(3)使用DataAdapter、DataSet等對象對獲得的數(shù)據(jù)進(jìn)行操作。

(4)使用數(shù)據(jù)控件(如DataGrid等)向用戶顯示操作的結(jié)果。

6.3數(shù)據(jù)庫開發(fā)實(shí)例

本節(jié)將實(shí)現(xiàn)Windows窗體中的簡單數(shù)據(jù)訪問,闡述通過窗體訪問數(shù)據(jù)庫的基本過程,并說明ADO.NET數(shù)據(jù)組件和對象的使用方法。

【案例6-2】

圖書管理數(shù)據(jù)庫系統(tǒng)。

已知在E盤下有一個(gè)用于圖書管理的名為Tsgl.mdb的Access數(shù)據(jù)庫,該數(shù)據(jù)庫中有一個(gè)名為tushu的表,用來存放圖書信息,通過編程來實(shí)現(xiàn)利用數(shù)據(jù)網(wǎng)格(DataGrid)控件顯示表中的數(shù)據(jù),并且編輯數(shù)據(jù)以更新數(shù)據(jù)庫。

該系統(tǒng)的設(shè)計(jì)可概括為以下幾個(gè)步驟。

(1)創(chuàng)建Windows窗體。

(2)配置數(shù)據(jù)連接Connection對象和數(shù)據(jù)適配器DataAdapter對象。

(3)創(chuàng)建和配置DataSet對象,用于存儲查詢結(jié)果。

(4)向窗體添加DataGrid控件,并將其綁定到數(shù)據(jù)集上。

(5)通過添加代碼來填充數(shù)據(jù)集。

(6)添加代碼,將數(shù)據(jù)的更改發(fā)送回?cái)?shù)據(jù)庫。

上述步驟執(zhí)行后將建立如圖6-7所示的界面。

【技能目標(biāo)】

(1)創(chuàng)建Windows窗體,配置相關(guān)對象和控件。

(2)掌握ADO?.NET數(shù)據(jù)組件和對象的使用方法。

(3)掌握簡單數(shù)據(jù)庫應(yīng)用程序的開發(fā)方法。圖6-7圖書管理數(shù)據(jù)庫運(yùn)行界面

【操作要點(diǎn)與步驟】

(1)創(chuàng)建項(xiàng)目和窗體。創(chuàng)建一個(gè)新項(xiàng)目,項(xiàng)目命名為TSGLXT,并在Windows窗體設(shè)計(jì)器中顯示新窗體。

(2)創(chuàng)建并配置數(shù)據(jù)連接和數(shù)據(jù)適配器??梢允褂孟?qū)?chuàng)建數(shù)據(jù)適配器。該適配器包含用于讀取和寫入數(shù)據(jù)庫信息的SQL語句。該向?qū)Э梢詭椭x所需的SQL語句。如有必要,該向?qū)н€可以創(chuàng)建與數(shù)據(jù)庫的連接。運(yùn)行效果如圖6-12所示。具體操作步驟如下:

在“工具箱”的“數(shù)據(jù)”選項(xiàng)卡中,將OleDbDataAdapter對象拖到窗體上。“數(shù)據(jù)適配器配置向?qū)А眴雍?,可以幫助?chuàng)建連接和適配器。在該向?qū)е校瑘?zhí)行下列操作:

●創(chuàng)建或選擇一個(gè)指向E:\Tsgl.mdb數(shù)據(jù)庫的連接。先選擇OLEDB提供程序,如圖6-8所示;再選擇數(shù)據(jù)庫,如圖6-9所示。圖6-8OLEDB提供程序

圖6-9選擇數(shù)據(jù)庫●指定要使用SQL語句,如圖6-10所示。

●創(chuàng)建以下SQL語句,生成的SQL語句如圖6-11所示。

select書號,書名,作者,出版社,出版日期fromtushu圖6-10選擇SQL語句查詢方式圖6-11生成SQL語句

為了更方便地生成SQL語句,可以通過單擊“查詢生成器”來完成。如圖6-12所示,單擊“完成”按鈕,此時(shí),可以獲得一個(gè)OleDbConnection1連接,該連接包含如何訪問數(shù)據(jù)庫的信息。另外,還將擁有一個(gè)數(shù)據(jù)適配器OleDbAdapter1,其中包含要訪問數(shù)據(jù)庫中哪個(gè)表和哪些列的查詢語句。圖6-12完成數(shù)據(jù)適配器配置

如果數(shù)據(jù)表沒有設(shè)置主鍵,則生成INSERT語句、UPDATA語句、DELETE語句會出現(xiàn)不成功現(xiàn)象。

(3)創(chuàng)建數(shù)據(jù)集。建立數(shù)據(jù)庫連接之后,VB.NET可以基于數(shù)據(jù)適配器中設(shè)置的SQL查詢語句自動生成數(shù)據(jù)集。方法如下:

●從“數(shù)據(jù)”菜單中選擇“生成數(shù)據(jù)集”,顯示“生成數(shù)據(jù)集”對話框,如圖6-13所示。圖6-13“生成數(shù)據(jù)集”對話框●選擇“新建”選項(xiàng),將數(shù)據(jù)集命名為dsTushu,在“選擇要添加到數(shù)據(jù)集中的表”列表中,應(yīng)選擇tushu表。

●確?!皩⒋藬?shù)據(jù)集添加到設(shè)計(jì)器”已選中,然后單擊“確定”按鈕。此時(shí),VB.NET將數(shù)據(jù)集的一個(gè)實(shí)例dsTushu添加到窗體中,如圖6-14所示。

(4)向窗體添加DataGrid控件并將其綁定到數(shù)據(jù)集上。在窗體中顯示數(shù)據(jù)集內(nèi)的數(shù)據(jù)有兩種方法:一種是使用DataGrid控件同時(shí)顯示數(shù)據(jù)集內(nèi)的所有記錄;另一種是使用文本框等單個(gè)控件一次顯示一個(gè)記錄(該方法要求向窗體添加導(dǎo)航功能)。圖6-14自動生成名為dsTushu的數(shù)據(jù)集對象在本案例中,使用前一種方法。需要注意的是,DataGrid控件必須綁定到數(shù)據(jù)集才能顯示其中的數(shù)據(jù)。其操作步驟如下:

●在“工具箱”的“Windows窗體”選項(xiàng)卡中,將DataGrid控件拖到窗體上,如圖6-15所示。

●在DataSource屬性中,選擇dsTushu作為數(shù)據(jù)源。

●在DataMember屬性中,選擇tushu。圖6-15向“工具箱”的“Windows窗體”添加DataGrid控件設(shè)置這兩個(gè)屬性值的目的是將dsTushu數(shù)據(jù)集內(nèi)的tushu數(shù)據(jù)表綁定到DataGrid控件。

●調(diào)整DataGrid控件的高度和寬度,以便看到多個(gè)行和列。

(5)填充DataGrid控件。DataGrid控件被綁定到數(shù)據(jù)集之后,數(shù)據(jù)集不會被自動填寫。為此必須調(diào)用數(shù)據(jù)適配器DataAdapter對象的Fill方法來填充數(shù)據(jù)。具體方法如下:

●在“工具箱”的“Windows窗體”選項(xiàng)卡中,將Button控件拖到窗體上。

●將該按鈕命名為btnList,設(shè)置其Text屬性為“顯示”,如圖6-16所示。圖6-16添加“顯示”按鈕●雙擊該按鈕,編寫如下Click事件處理過程:

PrivateSubbtnList_Click(ByValsenderAsSystem.Object,_

ByValeAsSystem.EventArgs)HandlesbtnList.Click

dsTushu.Clear() ‘?清空數(shù)據(jù)集

OleDbDataAdapter1.Fill(dsTushu)’?傳遞要填充的數(shù)據(jù)集

EndSub

(6)更新數(shù)據(jù)庫。更新數(shù)據(jù)庫需要執(zhí)行兩個(gè)步驟。第一步,更新數(shù)據(jù)集。在Windows窗體中,DataGrid控件被綁定在數(shù)據(jù)集上,因此,在DataGrid控件中對數(shù)據(jù)庫進(jìn)行更新后,該控件會自動地將更新保存在數(shù)據(jù)集內(nèi)。由于數(shù)據(jù)集是獨(dú)立于數(shù)據(jù)源的,也就是說,更新數(shù)據(jù)集的同時(shí)沒有將更新直接寫入數(shù)據(jù)源,因此必須執(zhí)行第二步,即利用已更改的數(shù)據(jù)集更新數(shù)據(jù)源。這可以通過調(diào)用DataAdapter對象的Update方法來完成,該方法檢查數(shù)據(jù)集內(nèi)指定數(shù)據(jù)表中的每個(gè)記錄。如果某記錄已更改,則向數(shù)據(jù)庫發(fā)送相應(yīng)的“更新”(Update)、“插入”(Insert)或“刪除”(Delete)命令。在本案例中,向窗體添加一個(gè)按鈕,以便單擊時(shí)將數(shù)據(jù)集的更新發(fā)送到數(shù)據(jù)庫。具體操作步驟如下:

●在“工具箱”的“Windows窗體”選項(xiàng)中,將Button控件拖到窗體上。

●將該按鈕命名為btnUpdate,設(shè)置其Text屬性為“保存對數(shù)據(jù)庫的修改”。

●雙擊該按鈕,編寫如下Click事件處理過程:

(7)測試窗體。至此可以測試該窗體,實(shí)現(xiàn)在DataGrid控件中顯示數(shù)據(jù),并且用戶可以進(jìn)行更新。

●運(yùn)行該窗體。在窗體顯示后,單擊“顯示”按鈕,在DataGrid控件中顯示書籍列表。

●對DataGrid控件中的記錄進(jìn)行更改。再次單擊“顯示”按鈕,將會發(fā)現(xiàn)所做的更改未被保留。這是因?yàn)闆]有將所做更改從數(shù)據(jù)集保存到數(shù)據(jù)庫中,所以數(shù)據(jù)庫重新加載數(shù)據(jù)并刷新DataGrid控件時(shí),對數(shù)據(jù)做的更改沒有被保留。

●再次對DataGrid控件中的記錄進(jìn)行更改,然后單擊“保存對數(shù)據(jù)庫的修改”按鈕,并再次單擊“顯示”按鈕。因?yàn)橄鄳?yīng)數(shù)據(jù)更新已保存到數(shù)據(jù)庫中,所以數(shù)據(jù)庫重新加載數(shù)據(jù)時(shí)所做的的更改被保留下來,如圖6-17所示。圖6-17程序顯示界面

【案例6-3】

數(shù)據(jù)窗體向?qū)褂谩?/p>

數(shù)據(jù)窗體向?qū)荲B.NET中的一個(gè)數(shù)據(jù)庫應(yīng)用程序的輔助開發(fā)工具,利用它可以很容易地在窗體上顯示數(shù)據(jù)庫中的數(shù)據(jù)。下面以tushu表為例說明數(shù)據(jù)窗體向?qū)У氖褂谩?/p>

【技能目標(biāo)】

(1)啟動數(shù)據(jù)窗體向?qū)А?/p>

(2)熟悉數(shù)據(jù)窗體向?qū)У幕静僮鳌?/p>

(3)掌握使用數(shù)據(jù)窗體向?qū)ч_發(fā)簡單數(shù)據(jù)庫應(yīng)用程序的方法。

【操作要點(diǎn)與步驟】

(1)新建一個(gè)Windows應(yīng)用程序項(xiàng)目,選擇“項(xiàng)目”→“添加新項(xiàng)”選項(xiàng)。

(2)選擇“數(shù)據(jù)窗體向?qū)А眻D標(biāo),單擊“打開”按鈕,系統(tǒng)彈出“歡迎使用數(shù)據(jù)窗體向?qū)А睂υ捒颉?/p>

(3)單擊“下一步”按鈕,彈出“選擇要使用的數(shù)據(jù)集”對話框。在該對話框上需要為程序中出現(xiàn)的數(shù)據(jù)集DataSet組件命名(本案例命名為dsTushu)。

(4)單擊“下一步”按鈕,彈出“選擇數(shù)據(jù)連接”對話框。這里需要設(shè)定數(shù)據(jù)庫的連接。注意,此時(shí)可以使用已有連接,也可創(chuàng)建新的連接(本案例中將新建連接,如第(5)~(9)步所示)。

(5)單擊“新建連接”按鈕,彈出“數(shù)據(jù)鏈接屬性”對話框。對話框中“連接”選項(xiàng)卡用來設(shè)置連接到SQLServer數(shù)據(jù)庫的各項(xiàng)參數(shù)。由于本案例使用的Tsgl.mdb是Access數(shù)據(jù)庫,因此,首先需要在“提供程序”選項(xiàng)卡中選擇OLEDB數(shù)據(jù)提供程序。

(

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論