《Visual Basic NET程序設(shè)計(jì)》課件第6章_第1頁(yè)
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第2頁(yè)
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第3頁(yè)
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第4頁(yè)
《Visual Basic NET程序設(shè)計(jì)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩72頁(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)介

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

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

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

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

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

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

【案例6-1】

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

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

【技能目標(biāo)】

(1)啟動(dòng)MicrosoftAccess2000。

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

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

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

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

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

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

【相關(guān)知識(shí)】

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

SQL簡(jiǎn)介

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

下面簡(jiǎn)單介紹SQL中的基本語(yǔ)句。

1.INSERT語(yǔ)句

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

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

上述語(yǔ)句的功能是:向“表名”指定的表中插入一條記錄。其中,括號(hào)中列出將要添加新值的字段名;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表中插入一條記錄,并為書(shū)名、作者和出版社字段賦值,該語(yǔ)句可寫(xiě)為

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

2.DELETE語(yǔ)句

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

DELETEFROM表名[WHERE條件]

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

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

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

3.UPDATE語(yǔ)句

UPDATE語(yǔ)句的格式為

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

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

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

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

4.SELECT語(yǔ)句

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

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

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

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

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

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

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

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

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

6.2ADO.NET組件

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

設(shè)計(jì)ADO.NET組件的目的是從數(shù)據(jù)操作中分解出數(shù)據(jù)訪問(wèn),通過(guò).NET數(shù)據(jù)提供程序和DataSet組件實(shí)現(xiàn)此功能。其中,.NET數(shù)據(jù)提供程序是數(shù)據(jù)提供者,包括Connection、Command、DataReader和DataAdapter等對(duì)象;DataSet組件用于實(shí)現(xiàn)對(duì)結(jié)果數(shù)據(jù)的存儲(chǔ),以獨(dú)立于數(shù)據(jù)源的數(shù)據(jù)訪問(wèn)。圖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ù)訪問(wèn)。DataSet在任何數(shù)據(jù)源中檢索后得到數(shù)據(jù)并且將其保存在緩存中,它包含表以及所有表的約束、索引和關(guān)系。因此,也可以把它看做是內(nèi)存中的一個(gè)小型關(guān)系數(shù)據(jù)庫(kù)。

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

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

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

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

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

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

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

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

ADO.NET結(jié)構(gòu)的另一個(gè)核心元素是?.NET數(shù)據(jù)提供程序,設(shè)計(jì)該組件的目的是實(shí)現(xiàn)數(shù)據(jù)操作和對(duì)數(shù)據(jù)的快速、只讀訪問(wèn)。數(shù)據(jù)提供程序在應(yīng)用程序和數(shù)據(jù)源之間起著橋梁的作用。數(shù)據(jù)提供程序用于從數(shù)據(jù)源中檢索數(shù)據(jù)并且保證對(duì)數(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)行通信。可以直接訪問(wèn)SQLServer而不用添加OLEDB或開(kāi)放式數(shù)據(jù)庫(kù)連接(ODBC)層,因此它的實(shí)現(xiàn)更加精簡(jiǎn),并且具有良好的性能。SQLServer.NETFramework數(shù)據(jù)提供程序類位于System.Data.SqlClient命名空間。其引入代碼如下:

ImportsSystem.Data.SqlClient

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

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

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

ImportsSystem.Data.OleDb

3.ADO.NET對(duì)象及組件

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

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

1)?Connection對(duì)象

在對(duì)數(shù)據(jù)源進(jìn)行操作之前,首先需要建立與數(shù)據(jù)源的連接。可以使用Connection對(duì)象來(lái)創(chuàng)建連接對(duì)象。

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

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

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

而OleDbConnection對(duì)象的典型連接字符串如下:

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

UserID=sa;Password=”“;”

其中:

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

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

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

2)?Command對(duì)象

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

Command對(duì)象的常用屬性包括以下幾種:

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

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

●?Connection:用來(lái)設(shè)置要使用的Connection對(duì)象名。

3)?DataReader對(duì)象

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

4)?DataAdaper對(duì)象

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

DataAdapter對(duì)象的常用方法有以下幾種:

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

PublicFunctionFill(ByValdataSetasDataSet,ByValsrcTableasString)AsInteger

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

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

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

PublicOverridableFunctionUpdate(ByValdataSetasDataSet)AsInteger

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

5)?DataSet對(duì)象

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

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

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

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

dsBook.Tables[“tushu”].Rows[0][“書(shū)名”]

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

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

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

和DataSet、Connection、Command、DataAdapter對(duì)象相對(duì)應(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,分別對(duì)應(yīng)于SQLServer.NETFramework和OLEDB?.NETFramework兩個(gè)數(shù)據(jù)提供程序提供的不同數(shù)據(jù)源。圖6-6ADO.NET提供的數(shù)據(jù)組件由于數(shù)據(jù)組件與數(shù)據(jù)訪問(wèn)對(duì)象的屬性、方法和作用均相同,因此不再贅述。

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

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

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

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

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

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

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

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

【案例6-2】

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

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

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

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

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

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

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

(5)通過(guò)添加代碼來(lái)填充數(shù)據(jù)集。

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

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

【技能目標(biāo)】

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

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

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

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

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

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

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

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

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

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

select書(shū)號(hào),書(shū)名,作者,出版社,出版日期fromtushu圖6-10選擇SQL語(yǔ)句查詢方式圖6-11生成SQL語(yǔ)句

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

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

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

●從“數(shù)據(jù)”菜單中選擇“生成數(shù)據(jù)集”,顯示“生成數(shù)據(jù)集”對(duì)話框,如圖6-13所示。圖6-13“生成數(shù)據(jù)集”對(duì)話框●選擇“新建”選項(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自動(dòng)生成名為dsTushu的數(shù)據(jù)集對(duì)象在本案例中,使用前一種方法。需要注意的是,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ù)集不會(huì)被自動(dòng)填寫(xiě)。為此必須調(diào)用數(shù)據(jù)適配器DataAdapter對(duì)象的Fill方法來(lái)填充數(shù)據(jù)。具體方法如下:

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

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

PrivateSubbtnList_Click(ByValsenderAsSystem.Object,_

ByValeAsSystem.EventArgs)HandlesbtnList.Click

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

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

EndSub

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

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

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

●雙擊該按鈕,編寫(xiě)如下Click事件處理過(guò)程:

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

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

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

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

【案例6-3】

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

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

【技能目標(biāo)】

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

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

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

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

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

(2)選擇“數(shù)據(jù)窗體向?qū)А眻D標(biāo),單擊“打開(kāi)”按鈕,系統(tǒng)彈出“歡迎使用數(shù)據(jù)窗體向?qū)А睂?duì)話框。

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

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

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

(

溫馨提示

  • 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)論