VBSQL編程基礎(chǔ)教程_第1頁(yè)
VBSQL編程基礎(chǔ)教程_第2頁(yè)
VBSQL編程基礎(chǔ)教程_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余32頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、VB. NET數(shù)據(jù)庫(kù)編程基礎(chǔ)教程羅珊眾所周知,VB.NET自身并不具備對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的功能,它對(duì)數(shù)據(jù)庫(kù)的處理是通過(guò).NET FrameWork SDK中面向數(shù)據(jù)庫(kù)編程的類庫(kù)和微軟的MDAC來(lái)實(shí)現(xiàn)的。其中, ADO.NET又是 .NET FrameWork SDK中重要的組成部分。要了解VB.NET的數(shù)據(jù)庫(kù)編程,首先要明白 ADO.NET勺工作原理以及相關(guān) 的對(duì)象、方法、屬性。本文將結(jié)合具體實(shí)例為你簡(jiǎn)單介紹ADO.NE數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象以及VB.NET數(shù)據(jù)庫(kù)編程基本方法。一、ADO.NE數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象(一)ADO.NET簡(jiǎn)介ADO.NET是由微軟 Microsoft ActiveX Data Ob

2、ject(ADO)升級(jí)發(fā)展而來(lái)的。是在.NET中創(chuàng)建分布式數(shù)據(jù)共享程序的幵發(fā)接口。ADO.NET勺數(shù)據(jù)存取API提供兩種數(shù)據(jù)訪問(wèn)方式,分別用來(lái)識(shí)別并處理兩種類型的數(shù)據(jù)源,即SQLServer7.0(及更高的版本)和可以通過(guò)OLE DB進(jìn)行訪問(wèn)的其他數(shù)據(jù)源。為 此ADO.NE中包含了兩個(gè)類庫(kù),庫(kù)可以直接連接到 SQL Server的數(shù)據(jù),庫(kù)可以用于其他通過(guò)OLE DB進(jìn)行訪問(wèn) 的數(shù)據(jù)源。如Access數(shù)據(jù)。(二)ADO.NET勺名稱空間ADO.NET是圍繞System.Data基本名稱空間設(shè)計(jì),其他名稱空間都是從System.Data派生而來(lái)。它們使得 ADO.NET不僅訪問(wèn)DataBase中的

3、數(shù)據(jù), 而且可以訪問(wèn)支持OLE DB的數(shù)據(jù)源。當(dāng)我們討論 ADO.NET寸,實(shí)際討論的是 System.Data和System.Data.OleDb 名稱空間。這兩個(gè)空間的所有類幾乎都可以支持所有類型的數(shù)據(jù)源中的數(shù) 據(jù)。這里我們討論與后文實(shí)例有關(guān)的類。即OleDbconnection、OleDbDataAdapter、DataSet 和 DataView。上面列舉的類中沒(méi)有 OleDb前綴的,派生自System.Data空間,有此前綴的派生自空間。在使用中,如果要引用 OleDb前綴的 類,必須導(dǎo)入名稱空間。語(yǔ)法如下:使用沒(méi)有此前綴的類必須導(dǎo)入 System.Data名稱空間。語(yǔ)法如下:Imp

4、orts System.Data1.OleDbConnection 類OleDbConnection類提供了一個(gè)數(shù)據(jù)源連接。這個(gè)類的構(gòu)造函數(shù)接受一個(gè) 可選參數(shù),稱為連接字符串。(1) 連接字符串:我們來(lái)看一下如何在連接字符串上使用參數(shù)來(lái)初始化一個(gè)連接對(duì)象Dim objconn ectti on as OleDbC onn ectio n=NewOleDbConnection( "Provider二SQLOLEDB;&DataSource=localhost;lnitial Catalog二pubs;&UserlD=liuguo;Password=1234; “)上面的

5、連接字符串使用SQLOLED提供者訪問(wèn)SQL Server數(shù)據(jù)庫(kù)。DataSource參數(shù)指定數(shù)據(jù)庫(kù)位于本地機(jī)器上,Initial Catalog參數(shù)表示我們要訪問(wèn)的數(shù)據(jù)庫(kù)名稱是 pubs ”。(2) 打幵和關(guān)閉數(shù)據(jù)庫(kù):一旦用上面的方法初始化了一個(gè)連接對(duì)象,就可以調(diào)用OleDbCo nn ection類的任何方法來(lái)操作數(shù)據(jù)。其中打幵與關(guān)閉數(shù)據(jù)庫(kù)方法是任何操作的基本 環(huán)節(jié)。打幵數(shù)據(jù)庫(kù):objCo nn ectio n.Ope n()關(guān)閉數(shù)據(jù)庫(kù):objCo nn ectio n.Close()OleDbConnection類的其他方法與屬性請(qǐng)查閱相關(guān)手冊(cè)。2.0leDbDataAdapter 類O

6、leDbDataAdapter類可以在所有 OLE DB數(shù)據(jù)源中讀寫數(shù)據(jù),并且可以設(shè) 置為包含要執(zhí)行的SQL語(yǔ)句或者存儲(chǔ)過(guò)程名。OleDbDataAdapter類并不真 正存儲(chǔ)任何數(shù)據(jù),而是作為DataSet類和數(shù)據(jù)庫(kù)之間的橋梁。SelectCommand 屬性:要從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),必須首先設(shè)置OleDbDataAdapter類的SelectComma nd屬性。該屬性用來(lái)指定選取哪些數(shù)據(jù)以及如何選取數(shù)據(jù)。Fill 方法:Fill方法用來(lái)完成向 DataSet對(duì)象中填充由OleDbDataAdapter對(duì)象從數(shù) 據(jù)庫(kù)中檢索的數(shù)據(jù)。其語(yǔ)法如下:Fill(DataSet,Str ing)其中,D

7、ataSet參數(shù)用于指定一個(gè)有效的 DataSet對(duì)象,將用數(shù)據(jù)進(jìn)行填 充;String參數(shù)指定了用于表映射的表名稱。(3) DataView 類:DataView類一般用于從DataSet類中排序、過(guò)濾、查找、編輯和導(dǎo)航數(shù)據(jù)。 與DataSet 一樣其內(nèi)部數(shù)據(jù)使用的是DataTable對(duì)象。DataView 類是DataTable對(duì)象的一個(gè)自定義視圖。同時(shí)DataView中的數(shù)據(jù)又獨(dú)立于DataSet中DataTable包含的數(shù)據(jù),所以可以對(duì)數(shù)據(jù)進(jìn)行操作而又不會(huì)影 響DataSet中的數(shù)據(jù)。其主要方法與屬性如下:Sort方法:對(duì)DataView包含的數(shù)據(jù)進(jìn)行排序。語(yǔ)法如下:objDataVi

8、ew.Sort =排序條件“Find方法:在DataView搜索指定的數(shù)據(jù)行。語(yǔ)法如下:注意:Find方法查找不區(qū)分大小寫;如果找到一個(gè)匹配數(shù)據(jù),F(xiàn)ind方法將返回其在DataView中記錄位置,否則返回-1。有關(guān)DataView的其他方法與屬性請(qǐng)查閱相關(guān)手冊(cè)。(三)ADO.NET的核心組件ADO.NET勺核心組件主要包括:Connections :連接管理數(shù)據(jù)庫(kù)事務(wù)。Comma nd:向數(shù)據(jù)庫(kù)發(fā)送的操作命令。DataReaders :直接讀取流數(shù)據(jù)。DataSets和DataSetCommands處理內(nèi)存鏡像數(shù)據(jù)。ADO.NET首先用Connections對(duì)象在 Web頁(yè)面和數(shù)據(jù)庫(kù)之間建立連

9、接,然后通過(guò)Comma nd向數(shù)據(jù)庫(kù)提供者發(fā)出操作命令,使操作結(jié)果以流數(shù)據(jù)的 形式返回連接。再通過(guò)DataReaders快速讀取流數(shù)據(jù),保存數(shù)據(jù)到DataSets 對(duì)象。最后再由DataSetComma nds對(duì)象對(duì)數(shù)據(jù)進(jìn)行集中訪問(wèn)和操作。1. C onn ecti ons 對(duì)象.NET框架中共提供了兩個(gè) Connections對(duì)象:SQLConnection和ADOConnection。應(yīng)用 Connections 對(duì)象時(shí),先用 Connections 對(duì)象建立連接,然后調(diào)用 Ope n方法來(lái)打幵連接。通常建立鏈接時(shí),要提供一些信息,如數(shù)據(jù)庫(kù)所在位置、數(shù)據(jù)庫(kù)名稱、用戶賬號(hào)、密碼等相關(guān)信息,C

10、onn ection對(duì)象提供了一些常用屬性用來(lái)進(jìn)行此類設(shè)置。(圖)SQLConnection的具體操作方法是:Dim myConn ecti on as stri ng=server=localhost;uid=liuguo;pwd=12345;database=n orthw ind“Dim myConn As OleDbC onn ecti on 二 New OleDbC onn ecti on(myConn ecti on) ADOConnection的具體操作方法是:Dim myConn ecti on As stri ng=localhost;uid=liuguo;pwd=12345

11、;l ntial catalog二Northw ind;“Dim myConn As OleDbC onn etio n 二 New OleDbC onn ecti on(myConn ecti on) MyCo nn. Ope n()2. Comma nds對(duì)象當(dāng)鏈接到數(shù)據(jù)庫(kù)之后,可以使用Comma n對(duì)象對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,如進(jìn)行數(shù)據(jù)添加、刪除、修改等操作。一個(gè)命令(Command可以用典型的SQL語(yǔ)句來(lái)表達(dá),包括執(zhí)行選擇查詢(Select Query)來(lái)返回記錄集,執(zhí)行行動(dòng)查詢(Action Query)來(lái)更新(增加、編輯或刪除)數(shù)據(jù)庫(kù)的記錄,或者創(chuàng)建并 修改數(shù)據(jù)庫(kù)的表結(jié)構(gòu)。當(dāng)然命令(Co

12、mma nd也可以傳遞參數(shù)并返回值。Comma n可以被明確的界定,或者調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。Dim objCmd as New OleDbCommand(SELECT * From users ,objConn)以上語(yǔ)句建立Comma nd根據(jù)習(xí)慣,也可以使用以下方法:Dim objCmd as New OleDbComma nd()objCmd.C onn ecti on 二 objConnobjCmd.Comma ndText = "SELECT * FROM users"3. DataReaders 對(duì)象DataReaders是專門用來(lái)讀取數(shù)據(jù)的對(duì)象,這個(gè)對(duì)象除了

13、讀數(shù)據(jù)以外,不能做其他任何數(shù)據(jù)庫(kù)操作。Dim objReader as OleDbDataReaderobjReader = objCmd.ExecuteReaderWhile objReader.ReadRespo nse.Write(objReader.GetStri ng(0) &/End While4. DataSet 對(duì)象DataSet是ADO.NET的核心。DataSet是一個(gè)存在于內(nèi)存中的數(shù)據(jù)庫(kù),也就是說(shuō)它是離線的,并沒(méi)有同數(shù)據(jù)庫(kù)建立即時(shí)的連線。在ADO.NET中,DataSet是專門用來(lái)處理從數(shù)據(jù)保存體(Data Store)中讀出的數(shù)據(jù)。不管 底層的數(shù)據(jù)庫(kù)是 SQL

14、Server還是ADO DataSet的行為都是一致的。可以 使用相同的方式來(lái)操作從不同數(shù)據(jù)來(lái)源取得的數(shù)據(jù)。在DataSet中可以包含任意數(shù)量的 DataTable(數(shù)據(jù)表),且每個(gè)DataTable 對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)表(Table)或視圖(View)。一般來(lái)說(shuō),一個(gè)對(duì)應(yīng)DataTable對(duì)象的數(shù)據(jù)表就是一堆數(shù)據(jù)行 (DataRow)與列(DataColumn)的 集合。DataTable會(huì)負(fù)責(zé)維護(hù)每一筆數(shù)據(jù)行保留它的初始狀態(tài)(OriginalState)和當(dāng)前的狀態(tài)(Current State),以解決多人同時(shí)修改數(shù)據(jù)時(shí)引發(fā) 的沖突問(wèn)題。DataSet是XML與ADC結(jié)合的產(chǎn)物,它的一個(gè)

15、重要的特點(diǎn)是與數(shù)據(jù)庫(kù)或SQL無(wú)關(guān)。它只是簡(jiǎn)單地對(duì)數(shù)據(jù)表進(jìn)行操作,交換數(shù)據(jù)或是將數(shù)據(jù)綁定到用戶 界面上。如以下這個(gè)例子:Dim ds1 As New DataSet()Dim dtable As new DataTable( "people “)With dtable.Colu mns.Add( FName,System.Type.GetType( "System.String ).Add( LName, System.Type.GetType( "System.String ).Add( UID, System.Type.GetType( "System

16、nt32 )End With dtable.Colu mns( UID).Autol ncreme nt = Trueds1.Tables.Add(dtable)dim pkey() as DataColumn 二ds1.Tables("people ").Columns( UID)ds1.Tables( "people “).PrimaryKey = pkey以上語(yǔ)句稍微有點(diǎn)復(fù)雜,我們來(lái)簡(jiǎn)單分析一下。前半部分我們建立了一個(gè)DataSet和一個(gè)叫People的DataTable,然后,我們?yōu)檫@個(gè)DataTable加入了三個(gè)列并將 UID”列設(shè)為自動(dòng)遞增。最后,將這

17、個(gè)DataTable加入到了 DataSet。最后我們定義一個(gè)叫pkey()的主鍵,將其指向People。二、數(shù)據(jù)的綁定VB.NET沒(méi)有自己的類庫(kù),它依托的是 .NET FrameWork SDK中的類庫(kù),雖然在.NET FrameWrokSDK中并沒(méi)有提供在 VB中的的DbLabel、DbComboBox等數(shù)據(jù)庫(kù)組件,但.NET FrameWork SDK中提供了一種數(shù)據(jù)綁定技術(shù),可以 把打幵的數(shù)據(jù)表中的某個(gè)或者某些字段綁定到在命名空間System.Wi ndow.Forms 中定義的 Win Form 組件(如 TextBox 組件、ComboBox 組件、Label組件等)中的某些屬性上

18、,從而提供這些組件顯示出數(shù)據(jù)表中 的記錄信息,也就實(shí)現(xiàn)了 DbTextBox、DbComboBo等組件。(一)數(shù)據(jù)綁定和 Windows窗體基礎(chǔ)知識(shí)數(shù)據(jù)綁定指的是一個(gè)過(guò)程,即在運(yùn)行時(shí)自動(dòng)為包含數(shù)據(jù)的結(jié)構(gòu)中的一個(gè)或 多個(gè)窗體控件設(shè)置屬性的過(guò)程。具體而言,是指Windows窗體使用ADO.NET 進(jìn)行數(shù)據(jù)綁定的過(guò)程。使用數(shù)據(jù)綁定,你無(wú)需顯式編寫實(shí)例化連接和創(chuàng)建 數(shù)據(jù)集的代碼(而使用非綁定窗體則必須這樣做),與Windows窗體相關(guān)聯(lián) 的向?qū)槟憔帉懕匾?ADO.NET弋碼。Win dows窗體使用戶可以輕松綁定到幾乎所有包含數(shù)據(jù)的結(jié)構(gòu)。這表示用 戶可以使用ADO.NETS定到傳統(tǒng)的數(shù)據(jù)存儲(chǔ)區(qū)(

19、如存儲(chǔ)在Access或SQL Server表中的數(shù)據(jù)),也可以綁定到從文件讀取的、包含在其他控件的或 存儲(chǔ)在陣列中的數(shù)據(jù)結(jié)果。將窗體綁定到數(shù)據(jù)后,就可以將窗體上的控件 綁定到特定的數(shù)據(jù)元素。最傳統(tǒng)的數(shù)據(jù)綁定包括將文本框控件(TextBox)的Text屬性綁定到數(shù)據(jù)源的列,還可以綁定Image控件的圖形、控件的背景或窗體上任意控件的其他任意屬性。Win dows窗體可以進(jìn)行兩種類型的數(shù)據(jù)綁定:簡(jiǎn)單數(shù)據(jù)綁定允許將控件綁 定到單個(gè)數(shù)據(jù)元素;復(fù)雜數(shù)據(jù)綁定允許將多個(gè)數(shù)據(jù)元素綁定到一個(gè)控件。(二)數(shù)據(jù)與控件的綁定在VB.NET中要向控件綁定一個(gè)數(shù)據(jù)源,就必須為該控件設(shè)置DataBinding 屬性。該屬性

20、可以訪問(wèn) Con trolBi ndi ngsCollection類,該類對(duì)每一個(gè)控件的綁定進(jìn)行管理,并且具有很多屬性和方法。Add方法為控件創(chuàng)建一個(gè)綁定并將它加到Con trolB in di ngsCollection中Add方法有3個(gè)參數(shù)語(yǔ)法如下:Object.DataBi ndi ngs.Add(propert yn ame,datasource,datamember)其中,Object表示窗體上的有效控件;Propertyname參數(shù)表示被綁定控件的屬性;Datasource參數(shù)表示被綁定的數(shù)據(jù)源,可以是任何包含數(shù)據(jù)的 有效對(duì)象如 DataSetQataView 或者DataTabl

21、e等;Datamember參數(shù)代表 被綁定給控件的數(shù)據(jù)源中的數(shù)據(jù)字段。1. 綁定前的準(zhǔn)備工作 創(chuàng)建一個(gè)名為db1的Access數(shù)據(jù)庫(kù),數(shù)據(jù)表Student的結(jié)構(gòu)如圖所示:并在表中增加以下幾條記錄。如 圖所示。創(chuàng)建和配置數(shù)據(jù)集:創(chuàng)建項(xiàng)目,就可以創(chuàng)建和配置窗體所基于的數(shù)據(jù)集了。數(shù)據(jù)集是內(nèi)存中包 含表、關(guān)系和約束的緩存,其中的每個(gè)表均為列和行的集合。數(shù)據(jù)集能夠 識(shí)別其原始狀態(tài)和當(dāng)前狀態(tài),因此可以跟蹤發(fā)生的變化。數(shù)據(jù)集中的數(shù)據(jù) 被視為可更新數(shù)據(jù)。步驟如下: 新建一個(gè)名為 myDataTest的項(xiàng)目,將表單的 Name屬性改為:“rmtest ”; Text屬性設(shè)為 數(shù)據(jù)綁定舉例”。在表單中增加一個(gè) O

22、leDbDataAdapter控件。這時(shí)會(huì)自動(dòng)彈出 數(shù)據(jù)適配器 配置向?qū)А睂?duì)話框。點(diǎn)擊 下一步”選擇 新建連接”將彈出相應(yīng)的對(duì)話框,選擇 Microsoft Jet 4.0 OLE DB Provider”選項(xiàng),點(diǎn)擊 Next”按鈕,設(shè)定數(shù)據(jù)源。在這里設(shè)置好你的數(shù)據(jù)源后點(diǎn)擊OK按鈕。在打幵的對(duì)話框中選擇你的數(shù)據(jù)連接,設(shè)置完畢后點(diǎn)擊下一步”按鈕創(chuàng)建SQL查詢語(yǔ)句。在SQL生成器輸入中輸入以下語(yǔ)句,并點(diǎn)擊 完成”。此時(shí) 就完成與數(shù)據(jù)源的連接工作。SELECT StuID, StuName, StuSex, StuBorn, StuCore FROM stude nt在窗體的組件欄中將顯示名為Ole

23、DbConnection1的OleDbConnection對(duì)象和名為 OleDbDataAdapter1 的 OleDbDataAdapter 對(duì)象。其中,OleDbCo nn ectio n1對(duì)象包含有關(guān)如何訪問(wèn)選定數(shù)據(jù)庫(kù)的信息。OleDbDataAdapter1對(duì)象包含一個(gè)查詢,它定義了要訪問(wèn)的數(shù)據(jù)庫(kù)中的表 和列。(3)生成數(shù)據(jù)集類:點(diǎn)擊 數(shù)據(jù)-生成數(shù)據(jù)集”菜單命令,此時(shí)將出現(xiàn) 生成數(shù)據(jù)庫(kù)”對(duì)話框。在 新建”框中myDataSet作為要?jiǎng)?chuàng)建的新數(shù)據(jù)集的名稱。 確保選中 將此數(shù)據(jù)集添加到設(shè)計(jì)器”選項(xiàng)。點(diǎn)擊 確定”按鈕。這樣即可生成數(shù)據(jù)集。 完成上述步驟,在窗體的組件欄上將顯示一個(gè)新的控件 m

24、yDataSetl。此控 件是myDataSet.xsd文件的一個(gè)引用,該文件也被添加到 解決方案資源管 理器”窗口中。到此,準(zhǔn)備工作結(jié)束。我們就可以將數(shù)據(jù)集綁定給控件來(lái)顯示數(shù)據(jù)集中所 包含的數(shù)據(jù)了。2. 綁定到DataGrid控件(1) 在窗體中增加一個(gè) DataGrid控件,調(diào)整其大小與窗體相符。并對(duì)應(yīng)以 下設(shè)置修改其相關(guān)屬性:DataSource 屬性為 myDataSetl ; Datamember屬性為 student。完成上述步驟,即將數(shù)據(jù)集綁定到數(shù)據(jù)網(wǎng)格控件中了。只需再完成一個(gè)步 驟,就可以看到數(shù)據(jù)網(wǎng)格控件中顯示的數(shù)據(jù)了。(2) 雖然數(shù)據(jù)網(wǎng)格控件已被綁定到數(shù)據(jù)集上,但加載窗體時(shí)并

25、不會(huì)自動(dòng)填充數(shù)據(jù)集。加載窗體時(shí),請(qǐng)使用窗體的Load事件過(guò)程,在數(shù)據(jù)網(wǎng)格控件中填充數(shù)據(jù)。代碼如下:Private Sub frmtest_Load( ByVal sen der As System.Object, _ByVal e As System.Eve ntArgs) Ha ndles MyBase.Load'加載數(shù)據(jù)網(wǎng)格控件MyDataSet1.Clear()End Sub在Load事件過(guò)程中,首先需要清除數(shù)據(jù)集,然后用先前創(chuàng)建的OleDbDataAdapterl對(duì)象的Fill方法填充數(shù)據(jù)集。需要將表名傳遞給第二 個(gè)參數(shù),因?yàn)閿?shù)據(jù)網(wǎng)格控件將使用第二個(gè)參數(shù)檢索以前在DataMem

26、ber屬性中指定的正確DataMember (stude nt)。(3) 現(xiàn)在,我們可以來(lái)看看我們的成果了,試運(yùn)行一下程序。在 解決方案資源管理器”窗口中,右擊項(xiàng)目名稱,從快捷菜單中選擇 屬性 命令,在打幵的對(duì)話框中點(diǎn)擊啟動(dòng)對(duì)象”組合框并從列表中選擇 “rmtest 選項(xiàng)。然后點(diǎn)擊 確定”按鈕。最后按下F5鍵即可運(yùn)行此項(xiàng)目。3. 綁定到TextBox控件在上面我們介紹的實(shí)例窗體 frmtest上刪除DataGrid控件,并清除 frmtest_Load中的代碼。按照 圖所示設(shè)計(jì)程序界面。上圖中各控件相關(guān)屬性是:(圖)(其余的控件,我們將在下面的內(nèi)容中用到。)TextBox控件上了。界面創(chuàng)建完成

27、以后,我們就可以把數(shù)據(jù)集綁定到每個(gè) 步驟如下: 選擇要綁定的TextBox控件。按下F4鍵查看其 屬性”窗口。點(diǎn)擊展幵DataBindings ”屬性,在 DataBindings ” 中選擇 Text 屬性。(2) 打幵組合框并將各個(gè)文本框綁定到相應(yīng)的字段。如需要將TxtStuID ”文本框綁定到StulD字段,請(qǐng)點(diǎn)擊myDataSetl上的+”號(hào),再點(diǎn)擊student上的+”號(hào),然后選擇StuID字段。(3) 按照上述方法把其他幾個(gè)文本框綁定到相應(yīng)的字段上。需要說(shuō)明的是:雖然已綁定各個(gè)字段但還必須編寫代碼才能在首次加載窗體時(shí)用數(shù)據(jù)填充窗體。代碼如下:Private Sub frmtest_

28、Load(ByVal sender As System.Object, ByVal e AsSystem.Eve ntArgs) Han dles MyBase.LoadMyDataSet1.Clear()OleDbDataAdapter1.Fill(MyDataSet1,student )End Sub按下F5鍵試運(yùn)行一下程序。仔細(xì)觀察一下運(yùn)行結(jié)果我們就會(huì)發(fā)現(xiàn),程序在實(shí)現(xiàn)時(shí)自動(dòng)用數(shù)據(jù)集中的第一條記錄來(lái)填充各件控件。(三)用代碼實(shí)現(xiàn)數(shù)據(jù)綁定上面我們著重探討了控件與數(shù)集據(jù)綁定的向?qū)J健_@種模式雖然實(shí)現(xiàn)方 法簡(jiǎn)單,但是卻不靈活,可移植性較差。為此,我們?yōu)榇蠹医榻B如何用代 碼來(lái)實(shí)現(xiàn)數(shù)據(jù)綁定。用代碼

29、實(shí)現(xiàn)數(shù)據(jù)綁定的優(yōu)點(diǎn)在于靈活自由,代碼移植 方便。為了便于更好的理解,我們?nèi)匀贿x用TextBox”控件作為實(shí)例來(lái)介紹。1.綁定到TextBox控件(1) 界面設(shè)計(jì):新建一個(gè)項(xiàng)目,按照 圖的方法設(shè)置程序界面,再增加一個(gè)Butt on控件,將其Text屬性設(shè)為TextBox數(shù)據(jù)綁定”。(2) 代碼實(shí)現(xiàn):'指定程序中引用的名稱空間:在代碼窗中輸入:Imports System.Drawi ngImports System.Wi ndows.FormsImports System.Comp onen tModelImports SystemImports System.Data首先定義全局變量

30、myDataSet及GetConnected()方法,代碼如下:Public Class FormlIn herits FormPrivate WithEve nts Butt on1 As Butt onPrivate TextBox1 As TextBox(省略部分自動(dòng)生成代碼)Private myDataSet As DataSetPrivate comp onents As System.Comp onen tModel.C on tai nerPublic Sub New()MyBase.New()GetCo nn ected()'這個(gè)過(guò)程是用于建立連接,打幵數(shù)據(jù)庫(kù)In it

31、ializeComp onen t()End Sub'清除在程序中使用過(guò)的資源Protected Overloads Overrides Sub Dispose(ByVal disposing AsBoolea n)(省略部分自動(dòng)生成代碼)End Sub'為GetConnected()方法增加代碼,用來(lái)打幵數(shù)據(jù)表,返回?cái)?shù)據(jù)集。Public Sub GetCo nn ected()'創(chuàng)建一個(gè) OleDbConnectionDim ConnectionString As String =“ Provider =Microsoft.Jet.OLEDB.4.0; Data So

32、urce = e:My Docume ntsdb1.mdbDim myC onn As OleDbCo nn ection = New OleDbCo nn ectio n()myC onn.Conn ectio nStri ng = Conn ecti on Stri ngDim strCom As Stri ng =“ SELECT * FROM stude nt “'創(chuàng)建一個(gè)DataSetmyDataSet = New DataSet()myConn. Ope n()'用OleDbDataAdapter 得到一個(gè)數(shù)據(jù)集Dim myComma nd As OleDbData

33、Adapter = New OleDbDataAdapter(strCom, myC onn)'把Dataset綁定student數(shù)據(jù)表myCommand.Fill(myDataSet, 'student “)'關(guān)閉此 OleDbConnectionmyCo nn .Close()End Sub'初始化窗體中的組件Private Sub In itializeComp onen t()(省略部分自動(dòng)生成代碼)End Sub'將各個(gè)文本框控件綁定到數(shù)據(jù)庫(kù)的各個(gè)字段。Private Sub Butto n1_Click(ByVal sen der As Ob

34、ject, _ByVal e As System.Eve ntArgs) Ha ndles Butt on 1.ClickTxtStulD.DataBi ndi ngs.Add(New Bin di ng("Text ,Me.myDataSet, student.StulD )TxtStuName.DataBi ndi ngs.Add(New Bin di ng("TextMe.myDataSet, "student.StuName ")TxtStuSex.DataBindings.Add(New Binding("Text “,Me.myDa

35、taSet, student.StuSex )TxtStuBorn.DataB in di ngs.Add(New Bin di ng("Text",Me.myDataSet, "student.StuBorn ")TxtStuCore.DataB in di ngs.Add(New Bin di ng("Text",Me.myDataSet, "student.StuCore ")End SubEnd ClassModule Module1Sub Mai n()Applicatio n.Ru n(New Form

36、1()End SubE nd Module編譯后運(yùn)行程序,看看是不是與上面介紹的實(shí)例運(yùn)行結(jié)果相同。在上面的代碼中,我們新建了一個(gè)GetConnected()過(guò)程,用于建立連接,打幵數(shù)據(jù)庫(kù)。在用代碼實(shí)現(xiàn)數(shù)據(jù)綁定或者對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何操作前,就必須要先建立連接,打幵數(shù)據(jù)庫(kù),程序運(yùn)行結(jié)束后再關(guān)閉數(shù)據(jù)連接。在Butt on 1_Click 過(guò)程中,我們把TextBox”控件綁定到數(shù)據(jù)集 myDataSet中student ”的各個(gè)字段上。程序運(yùn)行后,點(diǎn)擊 TextBox數(shù)據(jù)綁定”按紐,程序就會(huì)用 myDataSet中 student ”中的數(shù)據(jù)來(lái)自動(dòng)填充文本框。2. 綁定到Label控件有了上面的內(nèi)容做

37、基礎(chǔ),再來(lái)討論如何把數(shù)據(jù)集綁定到Label控件上就顯得很簡(jiǎn)單了。把數(shù)據(jù)綁定到 Label控件的方法與綁定到 TextBox控件的方 法大同小異。此處不再詳細(xì)講解,只給出代碼實(shí)現(xiàn)綁定到Label控件的核心部分代碼。Private Sub Butto n1_Click (ByVal sen der As Object , _ByVal e As System.Eve ntArgs ) Ha ndles Butto n1.Click'把student表的StuName字段綁定到Label1的Text屬性上。Label1.DataB in di ngs.Add ( New Bin di ng

38、("Text ,Me.myDataSet ,student.StuName )End Sub3. 綁定到ComboBox控件上面介紹的是對(duì)組件的簡(jiǎn)單數(shù)據(jù)綁定,對(duì)組件的復(fù)雜數(shù)據(jù)綁定和它有所區(qū) 別,也有所相同,具體如下: 要對(duì)ComboBoX組件實(shí)現(xiàn)數(shù)據(jù)綁定,首先也是要打幵數(shù)據(jù)表,得到數(shù)據(jù) 集。這和上面TextBox組件的代碼大致一樣,在此略過(guò)。(2)實(shí)現(xiàn)數(shù)據(jù)綁定:設(shè)定了 ComboBoX組件的三個(gè)屬性就可以實(shí)現(xiàn)數(shù)據(jù)綁定了,這三個(gè)屬性是DataSource ”、 DisplayMember”、ValueMember”。其中 DataSource 表示指定的數(shù)據(jù)集;DisplayMembe

39、r表示ComboBoX組件顯示的字段值; ValueMember表示ComboBoX組件選擇后的值。這三個(gè)屬性的具體使用方法 如下:ComboBox1.DataSource = Me.myDataSetComboBox1.DisplayMember = 'studnet.StuName “ComboBox1.ValueMember = “ studnet.StuName “下面我們就來(lái)看看把數(shù)據(jù)集綁定到ComboBoX空件的核心代碼:Private Sub Butto n1_Click ( ByVal sen der As Object , _ByVal e As System.Eve

40、 ntArgs ) Ha ndles Butto n1.ClickComboBox1.DataSource = Me.myDataSetComboBox1.DisplayMember = student.StuName “/ComboBox1.ValueMember = “ student.StuNameEnd Sub注意:對(duì)ComboBoX空件進(jìn)行數(shù)據(jù)綁定的方法同樣適用于ListBox控件,因此關(guān)于LisBox控件數(shù)據(jù)綁定方法本文將不再介紹。需要者請(qǐng)參閱ComboBo湘關(guān)內(nèi)容。三、數(shù)據(jù)庫(kù)簡(jiǎn)單操作前面介紹了 ADO.NE基礎(chǔ),以及ADO.NET與 Windows窗體控件的綁定方法。但是,對(duì)于數(shù)

41、據(jù)庫(kù)編程我們更想了解的還是如何增加記錄,刪除記錄,更新記錄等數(shù)據(jù)庫(kù)記錄的操作方法。這里我們將以一個(gè)具體的實(shí)例為大家介紹這些操作方法。在圖3中,有btnFirst( 第一個(gè)記錄),btnEnd(最后一條記錄),btnAdd(增 加記錄),btnDel(刪除記錄),btnEdit(修改記錄)控件。用代碼形式打幵數(shù)據(jù)并在 frmtest_load中把數(shù)據(jù)綁定給TextBox控件。此處給出源代碼:'打幵數(shù)據(jù)庫(kù)Public Sub Ope nData()'創(chuàng)建一個(gè) OleDbConnectionDim ConnectionString As String =“ Provider =/Mi

42、crosoft.Jet.OLEDB.4.O; Data Source = e:My Docume ntsdb1.mdbDim myC onn As OleDbCo nn ection = New OleDbCo nn ectio n() myC onn.Conn ectio nStri ng = Conn ecti on Stri ngDim strCom As String =“ SELECT * FROM student'創(chuàng)建一個(gè)DataSet myDataSet = New DataSet()myConn. Ope n()'用OleDbDataAdapter 得到一個(gè)數(shù)據(jù)

43、集Dim myComma nd As OleDbDataAdapter = New OleDbDataAdapter(strCom,myConn)'把Dataset綁定student數(shù)據(jù)表myCommand.Fill(myDataSet, "student “)'關(guān)閉此 OleDbConnectionmyCo nn .Close()End Sub綁定數(shù)據(jù)到TextBox控件Private Sub frmtest_Load(ByValsender As System.Object, ByVai e AsSystem.Eve ntArgs) Han dies MyBase

44、.LoadtxtStulD.DataBi ndi ngs.Add(New Bin di ng("Text ,Me.myDataSet, student.StulD )txtStuName.DataBi ndi ngs.Add(New Bin di ng("Text",Me.myDataSet, "student.StuName ")txtStuSex.DataBi ndin gs.Add(New Bin di ng("Text",Me.myDataSet, "student.StuSex ")txtStu

45、Born.DataBindings.Add(New Binding("Text",Me.myDataSet, "student.StuBorn ")txtStuCore.DataB in di ngs.Add(New Bin di ng("Text",Me.myDataSet, "student.StuCore ")End Sub完成以上步驟后,我們就可以通過(guò)編程對(duì)數(shù)據(jù)庫(kù)進(jìn)行各作操作了。1. 實(shí)現(xiàn)對(duì)數(shù)據(jù)記錄的瀏覽在完成對(duì)窗體中的 Win Form組件進(jìn)行綁定后,實(shí)現(xiàn)對(duì)數(shù)據(jù)記錄的瀏覽操作的關(guān)鍵就是要找到如何定位數(shù)據(jù)記

46、錄指針的方法。而要實(shí)現(xiàn)這種處理就需 要用到.NET FrameWork SDK 中的名稱空間 System.Windows.Froms 中的 BindingManagerBase 類。Bin di ngMa nagerBase是一個(gè)抽象的類,主要用于管理同一數(shù)據(jù)表所有綁定 對(duì)象。BindingManagerBase 類中定義了二個(gè)屬性position ”和 Count”,第一個(gè)屬性是定義當(dāng)前數(shù)據(jù)指針,而第二個(gè)屬性主要是得到當(dāng)前數(shù)據(jù)集有 多少記錄數(shù)目。在已經(jīng)進(jìn)行完數(shù)據(jù)綁定后,通過(guò)這兩個(gè)屬性配合使用,實(shí) 現(xiàn)對(duì)數(shù)據(jù)記錄的瀏覽。(1) 向上翻閱一條記錄:雙擊 上一條”按鈕,在代碼窗中輸入以下代碼:Pr

47、ivate Sub btnPrevious_Click(ByValsender As System.Object, ByVale As System.EventArgs) Handles btnPrevious_.CIickMe.BindingContext(myDataSet,"student ).Position -= 1End Sub(2) 向下翻閱一條記錄:雙擊 下一條”按鈕在代碼窗中輸入以下代碼:Private Sub bt nN ext_Click(ByVal sen der As System.Object, ByVal eAs System.Eve ntArgs) H

48、an dlesbt nN ext.ClickEnd Sub(3) 翻到最后一條記錄:雙擊 最后一條記錄”按鈕,在代碼窗中輸入以下代碼:Private Sub btnEnd_Click(ByValsender As System.Object, ByVai e AsSystem.Eve ntArgs) Han dies btnEn d.ClickMe.BindingContext(myDataSet,student “).Position 二Me.BindingContext(myDataSet,student ).Count - 1End Sub(4) 翻閱到第一條記錄:雙擊 第一條記錄”按鈕

49、,在代碼窗中輸入以下代碼:Private Sub btn First_Click(ByVal sen der As System.Object, ByVai eAs System.Eve ntArgs) Ha ndles btn First.ClickMe.BindingContext(myDataSet,"student ).Position = 0End Sub說(shuō)明:為了代碼書寫方便,我們可以先定義一個(gè)Bin di ngMa nagerBase對(duì)象 myBind,如 myBind = Me.BindingContext (myDataSet,student ), 于是以上各句代碼

50、均可以簡(jiǎn)寫成:向下翻閱一條記錄:myBin d.Positi on 二 myBin d.Positi on + 1翻閱至 U最后一條記錄:myBin d.Positi on二 myB in d.co unt - 1翻閱到第一條記錄:myBi nd.Position = 02. 刪除數(shù)據(jù)記錄雙擊 刪除記錄”按鈕,在代碼窗中輸入以下代碼:Private Sub btnDel_Click(ByValsender As System.Object, ByVal e AsSystem.Eve ntArgs) Han dles btn Del.ClickDim ConnectionString As St

51、ring =“ Provider =Microsoft.Jet.OLEDB.4.O; Data Source = e:My Docume ntsdb1.mdb"Dim myC onn As OleDbCo nn ection = New OleDbCo nn ectio n()myC onn.Conn ectio nStri ng = Conn ecti on Stri ng myConn. Ope n()Dim strDele As Stri ng ="DELETE From stude nt WHERE StuID = ' " +txtStulD.Te

52、xt +"'"Dim myCommanAs OleDbCommand NewOleDbCommand(strDele, myConn)myComma nd.ExecuteN on Query() myDataSet.Tables( student ).Rows(Me.BindingContext(myDataSet, s tudent ).Position).Delete()myDataSet.Tables( student “).AcceptChanges()1O.myC onn .Close()End Sub前面四行代碼我們已經(jīng)非常熟悉,目的是建立與數(shù)據(jù)據(jù)的連接

53、并打幵數(shù)據(jù)庫(kù)。第6行代碼我們建立一個(gè) SQL查詢,用來(lái)查詢數(shù)據(jù)表中StuID字段值等于TxtStuID.Text 輸入值的所有記錄。并在第7行代碼中將查詢結(jié)果建 立一個(gè)新的OleDbComman對(duì)象,用來(lái)指定要?jiǎng)h除的記錄。第8行代碼是從數(shù)據(jù)庫(kù)中刪除指定的記錄,第9行代碼是從myDataSet中刪除記錄。前者是物理上刪除記錄,如果去掉第8行代碼運(yùn)行程序你就會(huì)發(fā)現(xiàn),記錄只是在當(dāng)前操作中被刪除了,在數(shù)據(jù)庫(kù)中依然存在。其中第6行代碼中定義的SQL查詢條件讀者可以根據(jù)需要自行指定。需要 說(shuō)明的是,由于我們?cè)趧?chuàng)建數(shù)據(jù)表時(shí),指定StuID字段的類型為Text類型,因此在書寫SQL語(yǔ)名時(shí)要在 二”號(hào)前加上單引

54、號(hào),具體格式請(qǐng)參照第 6行代碼。如果StuID字段類型為數(shù)字型,那么第6行正確寫法應(yīng)該為:Dim strDele As Stri ng ="DELETE From stude nt WHERE StuID = “ +txtStuID.Text3. 修改數(shù)據(jù)記錄修改數(shù)據(jù)的方法有很多,本文中我們將以采用SQL語(yǔ)言來(lái)修改數(shù)據(jù)記錄為例詳細(xì)介紹一下如何修改數(shù)據(jù)記錄。下面我們先看看程序代碼:Dim ConnectionString As String =“ Provider =Microsoft.Jet.OLEDB.4.0; Data Source = e:My Docume ntsdb1.md

55、bDim myC onn As OleDbCo nn ection = New OleDbCo nn ectio n() myC onn.Conn ectio nStri ng = Conn ecti on Stri ngmyConn. Ope n()'以上代碼用來(lái)連接數(shù)據(jù)源myDataSet.Tables( student ).Rows(Me.BindingContext(myDataSet,student ).Position).BeginEdit()'利用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)更新集合Dim StrUpdate As String = "Update student SET StuName二'“ + txtStuName.Text + ',StuSex二'"+ txtStuSex.Text +',StuBorn二'"+txtStuBorn.Text + "',St

溫馨提示

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