VBSQL編程基礎教程_第1頁
VBSQL編程基礎教程_第2頁
VBSQL編程基礎教程_第3頁
VBSQL編程基礎教程_第4頁
VBSQL編程基礎教程_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、們使得ADO.NET不僅訪問DataBase中的數(shù)據(jù),而且可以訪問支持OLE DB的數(shù)據(jù)源。當我們討論ADO.NET時,實際討論的是System.Data和System.Data.OleDb名稱空間。這兩個空間的所有類幾乎都可以支持所有類型的數(shù)據(jù)源中的數(shù)據(jù)。這里我們討論與后文實例有關的類。即OleDbconnection、OleDbDataAdapter、DataSet和 DataView。上面列舉的類中沒有OleDb前綴的,派生自System.Data空間,有此前綴的派生自System.Data.OleDb空間。在使用中,如果要引用OleDb前綴的類,必須導入System.Data.OleD

4、b名稱空間。語法如下:Imports System.Data.OleDb使用沒有此前綴的類必須導入System.Data名稱空間。語法如下:Imports System.Data1.OleDbConnection類OleDbConnection類提供了一個數(shù)據(jù)源連接。這個類的構(gòu)造函數(shù)接受一個可選參數(shù),稱為連接字符串。(1)連接字符串:連接字符串本身由下表中列出的參數(shù)構(gòu)成。(圖) 我們來看一下如何在連接字符串上使用參數(shù)來初始化一個連接對象。Dim objconnecttion as OleDbConnection=New OleDbConnection(Provider=SQLOLEDB;&am

5、p;DataSource=localhost;Initial Catalog=pubs;&UserID=liuguo;Password=1234;)上面的連接字符串使用SQLOLEDB提供者訪問SQL Server數(shù)據(jù)庫。Data Source參數(shù)指定數(shù)據(jù)庫位于本地機器上,Initial Catalog參數(shù)表示我們要訪問的數(shù)據(jù)庫名稱是“pubs”。(2)打開和關閉數(shù)據(jù)庫:一旦用上面的方法初始化了一個連接對象,就可以調(diào)用OleDbConnection類的任何方法來操作數(shù)據(jù)。其中打開與關閉數(shù)據(jù)庫方法是任何操作的基本環(huán)節(jié)。打開數(shù)據(jù)庫:objConnection.Open()關閉數(shù)據(jù)庫:obj

6、Connection.Close()OleDbConnection類的其他方法與屬性請查閱相關手冊。2.OleDbDataAdapter類OleDbDataAdapter類可以在所有OLE DB數(shù)據(jù)源中讀寫數(shù)據(jù),并且可以設置為包含要執(zhí)行的SQL語句或者存儲過程名。OleDbDataAdapter類并不真正存儲任何數(shù)據(jù),而是作為DataSet類和數(shù)據(jù)庫之間的橋梁。(1)SelectCommand屬性:要從數(shù)據(jù)庫中讀取數(shù)據(jù),必須首先設置OleDbDataAdapter類的SelectCommand屬性。該屬性用來指定選取哪些數(shù)據(jù)以及如何選取數(shù)據(jù)。(2)Fill方法:Fill方法用來完成向DataS

7、et對象中填充由OleDbDataAdapter對象從數(shù)據(jù)庫中檢索的數(shù)據(jù)。其語法如下:Fill(DataSet,String)其中,DataSet參數(shù)用于指定一個有效的DataSet對象,將用數(shù)據(jù)進行填充;String參數(shù)指定了用于表映射的表名稱。(3)DataView類:DataView類一般用于從DataSet類中排序、過濾、查找、編輯和導航數(shù)據(jù)。與DataSet一樣其內(nèi)部數(shù)據(jù)使用的是DataTable對象。 DataView類是DataTable對象的一個自定義視圖。同時DataView中的數(shù)據(jù)又獨立于DataSet中DataTable包含的數(shù)據(jù),所以可以對數(shù)據(jù)進行操作而又不會影響Dat

8、aSet中的數(shù)據(jù)。其主要方法與屬性如下:Sort方法:對DataView包含的數(shù)據(jù)進行排序。語法如下:objDataView.Sort = 排序條件Find方法:在DataView搜索指定的數(shù)據(jù)行。語法如下:rec=objDataView.Find(指定條件)注意:Find方法查找不區(qū)分大小寫;如果找到一個匹配數(shù)據(jù),F(xiàn)ind方法將返回其在DataView中記錄位置,否則返回-1。有關DataView的其他方法與屬性請查閱相關手冊。(三)ADO.NET的核心組件ADO.NET的核心組件主要包括:Connections:連接管理數(shù)據(jù)庫事務。Commands:向數(shù)據(jù)庫發(fā)送的操作命令。DataRead

9、ers:直接讀取流數(shù)據(jù)。DataSets和DataSetCommands:處理內(nèi)存鏡像數(shù)據(jù)。ADO.NET首先用Connections對象在Web頁面和數(shù)據(jù)庫之間建立連接,然后通過Commands向數(shù)據(jù)庫提供者發(fā)出操作命令,使操作結(jié)果以流數(shù)據(jù)的形式返回連接。再通過DataReaders快速讀取流數(shù)據(jù),保存數(shù)據(jù)到DataSets對象。最后再由DataSetCommands對象對數(shù)據(jù)進行集中訪問和操作。1.Connections對象.NET框架中共提供了兩個Connections對象:SQLConnection和ADOConnection。應用Connections對象時,先用Connection

10、s對象建立連接,然后調(diào)用Open方法來打開連接。通常建立鏈接時,要提供一些信息,如數(shù)據(jù)庫所在位置、數(shù)據(jù)庫名稱、用戶賬號、密碼等相關信息,Connection對象提供了一些常用屬性用來進行此類設置。(圖)SQLConnection的具體操作方法是:Dim myConnection as string = server=localhost;uid=liuguo;pwd=12345;database=northwindDim myConn As OleDbConnection = New OleDbConnection(myConnection)ADOConnection的具體操作方法是:Dim m

11、yConnection As string localhost;uid=liuguo;pwd=12345;Intial catalog=Northwind;Dim myConn As OleDbConnetion = New OleDbConnection(myConnection)MyConn.Open()2.Commands對象當鏈接到數(shù)據(jù)庫之后,可以使用Command對象對數(shù)據(jù)庫進行操作,如進行數(shù)據(jù)添加、刪除、修改等操作。一個命令(Command)可以用典型的SQL語句來表達,包括執(zhí)行選擇查詢(Select Query)來返回記錄集,執(zhí)行行動查詢(Action Query)來更新(增加、

12、編輯或刪除)數(shù)據(jù)庫的記錄,或者創(chuàng)建并修改數(shù)據(jù)庫的表結(jié)構(gòu)。當然命令(Command)也可以傳遞參數(shù)并返回值。 Command可以被明確的界定,或者調(diào)用數(shù)據(jù)庫中的存儲過程。 Dim objCmd as New OleDbCommand(SELECT * From users, objConn)以上語句建立Command,根據(jù)習慣,也可以使用以下方法:Dim objCmd as New OleDbCommand()objCmd.Connection = objConnobjCmd.CommandText = SELECT * FROM users 3.DataReaders對象DataReaders

13、是專門用來讀取數(shù)據(jù)的對象,這個對象除了讀數(shù)據(jù)以外,不能做其他任何數(shù)據(jù)庫操作。Dim objReader as OleDbDataReaderobjReader = objCmd.ExecuteReaderWhile objReader.ReadResponse.Write(objReader.GetString(0) & End While4.DataSet對象DataSet是ADO.NET的核心。DataSet是一個存在于內(nèi)存中的數(shù)據(jù)庫,也就是說它是離線的,并沒有同數(shù)據(jù)庫建立即時的連線。在 ADO.NET中,DataSet是專門用來處理從數(shù)據(jù)保存體(Data Store)中讀出的數(shù)據(jù)

14、。不管底層的數(shù)據(jù)庫是SQL Server還是ADO,DataSet的行為都是一致的??梢允褂孟嗤姆绞絹聿僮鲝牟煌瑪?shù)據(jù)來源取得的數(shù)據(jù)。 在DataSet中可以包含任意數(shù)量的DataTable(數(shù)據(jù)表),且每個DataTable對應一個數(shù)據(jù)庫的數(shù)據(jù)表(Table)或視圖 (View)。一般來說,一個對應DataTable對象的數(shù)據(jù)表就是一堆數(shù)據(jù)行(DataRow)與列(DataColumn)的集合。 DataTable會負責維護每一筆數(shù)據(jù)行保留它的初始狀態(tài)(Original State)和當前的狀態(tài)(Current State),以解決多人同時修改數(shù)據(jù)時引發(fā)的沖突問題。 DataSet是XML與

15、ADO結(jié)合的產(chǎn)物,它的一個重要的特點是與數(shù)據(jù)庫或SQL無關。它只是簡單地對數(shù)據(jù)表進行操作,交換數(shù)據(jù)或是將數(shù)據(jù)綁定到用戶界面上。 如以下這個例子:Dim ds1 As New DataSet()Dim dtable As new DataTable(people)With dtable.Columns.Add(FName, System.Type.GetType(System.String).Add(LName, System.Type.GetType(System.String).Add(UID, System.Type.GetType(System.Int32)End Withdtable.

16、Columns(UID).AutoIncrement = Trueds1.Tables.Add(dtable)dim pkey() as DataColumn = ds1.Tables(people).Columns(UID)ds1.Tables(people).PrimaryKey = pkey以上語句稍微有點復雜,我們來簡單分析一下。前半部分我們建立了一個DataSet和一個叫People的DataTable,然后,我們?yōu)檫@個DataTable加入了三個列并將“UID”列設為自動遞增。最后,將這個DataTable加入到了DataSet。最后我們定義一個叫pkey()的主鍵,將其指向Peo

17、ple。二、數(shù)據(jù)的綁定VB.NET沒有自己的類庫,它依托的是.NET FrameWork SDK中的類庫,雖然在.NET FrameWrok SDK中并沒有提供在VB中的的DbLabel、DbComboBox等數(shù)據(jù)庫組件,但.NET FrameWork SDK中提供了一種數(shù)據(jù)綁定技術(shù),可以把打開的數(shù)據(jù)表中的某個或者某些字段綁定到在命名空間System.Window.Forms中定義的 WinForm組件(如TextBox組件、ComboBox組件、Label組件等)中的某些屬性上,從而提供這些組件顯示出數(shù)據(jù)表中的記錄信息,也就實現(xiàn)了DbTextBox、DbComboBox等組件。(一)數(shù)據(jù)綁定

18、和Windows窗體基礎知識數(shù)據(jù)綁定指的是一個過程,即在運行時自動為包含數(shù)據(jù)的結(jié)構(gòu)中的一個或多個窗體控件設置屬性的過程。具體而言,是指Windows窗體使用ADO.NET進行數(shù)據(jù)綁定的過程。使用數(shù)據(jù)綁定,你無需顯式編寫實例化連接和創(chuàng)建數(shù)據(jù)集的代碼(而使用非綁定窗體則必須這樣做),與Windows窗體相關聯(lián)的向?qū)槟憔帉懕匾腁DO.NET代碼。 Windows窗體使用戶可以輕松綁定到幾乎所有包含數(shù)據(jù)的結(jié)構(gòu)。這表示用戶可以使用ADO.NET綁定到傳統(tǒng)的數(shù)據(jù)存儲區(qū)(如存儲在Access或 SQL Server表中的數(shù)據(jù)),也可以綁定到從文件讀取的、包含在其他控件的或存儲在陣列中的數(shù)據(jù)結(jié)果。將窗體

19、綁定到數(shù)據(jù)后,就可以將窗體上的控件綁定到特定的數(shù)據(jù)元素。最傳統(tǒng)的數(shù)據(jù)綁定包括將文本框控件(TextBox)的Text屬性綁定到數(shù)據(jù)源的列,還可以綁定Image控件的圖形、控件的背景或窗體上任意控件的其他任意屬性。Windows窗體可以進行兩種類型的數(shù)據(jù)綁定:簡單數(shù)據(jù)綁定允許將控件綁定到單個數(shù)據(jù)元素;復雜數(shù)據(jù)綁定允許將多個數(shù)據(jù)元素綁定到一個控件。(二)數(shù)據(jù)與控件的綁定在VB.NET中要向控件綁定一個數(shù)據(jù)源,就必須為該控件設置DataBinding屬性。該屬性可以訪問ControlBindingsCollection類,該類對每一個控件的綁定進行管理,并且具有很多屬性和方法。Add方法為控件創(chuàng)建一

20、個綁定并將它加到ControlBindingsCollection中。Add方法有3個參數(shù)語法如下:Object.DataBindings.Add(propertyname,datasource,datamember)其中,Object表示窗體上的有效控件;Propertyname參數(shù)表示被綁定控件的屬性;Datasource參數(shù)表示被綁定的數(shù)據(jù)源,可以是任何包含數(shù)據(jù)的有效對象如DataSet,DataView或者DataTable等;Datamember參數(shù)代表被綁定給控件的數(shù)據(jù)源中的數(shù)據(jù)字段。1.綁定前的準備工作(1)創(chuàng)建一個名為db1的Access數(shù)據(jù)庫,數(shù)據(jù)表Student的結(jié)構(gòu)如圖所

21、示:并在表中增加以下幾條記錄。如圖所示。(2)創(chuàng)建和配置數(shù)據(jù)集:創(chuàng)建項目,就可以創(chuàng)建和配置窗體所基于的數(shù)據(jù)集了。數(shù)據(jù)集是內(nèi)存中包含表、關系和約束的緩存,其中的每個表均為列和行的集合。數(shù)據(jù)集能夠識別其原始狀態(tài)和當前狀態(tài),因此可以跟蹤發(fā)生的變化。數(shù)據(jù)集中的數(shù)據(jù)被視為可更新數(shù)據(jù)。步驟如下:新建一個名為myDataTest的項目,將表單的Name屬性改為:“frmtest”;Text屬性設為“數(shù)據(jù)綁定舉例”。在表單中增加一個OleDbDataAdapter控件。這時會自動彈出“數(shù)據(jù)適配器配置向?qū)А睂υ捒颉|c擊“下一步”選擇“新建連接”將彈出相應的對話框,選擇“Microsoft Jet 4.0 OLE

22、 DB Provider”選項,點擊“Next”按鈕,設定數(shù)據(jù)源。在這里設置好你的數(shù)據(jù)源后點擊“OK”按鈕。在打開的對話框中選擇你的數(shù)據(jù)連接,設置完畢后點擊“下一步”按鈕創(chuàng)建SQL查詢語句。在SQL生成器輸入中輸入以下語句,并點擊“完成”。此時就完成與數(shù)據(jù)源的連接工作。SELECT StuID, StuName, StuSex, StuBorn, StuCore FROM student在窗體的組件欄中將顯示名為OleDbConnection1的OleDbConnection對象和名為OleDbDataAdapter1的 OleDbDataAdapter對象。其中,OleDbConnectio

23、n1對象包含有關如何訪問選定數(shù)據(jù)庫的信息。 OleDbDataAdapter1對象包含一個查詢,它定義了要訪問的數(shù)據(jù)庫中的表和列。(3)生成數(shù)據(jù)集類:點擊“數(shù)據(jù)生成數(shù)據(jù)集”菜單命令,此時將出現(xiàn)“生成數(shù)據(jù)庫”對話框。在“新建”框中myDataSet作為要創(chuàng)建的新數(shù)據(jù)集的名稱。確保選中“將此數(shù)據(jù)集添加到設計器”選項。點擊 “確定”按鈕。這樣即可生成數(shù)據(jù)集。 完成上述步驟,在窗體的組件欄上將顯示一個新的控件myDataSet1。此控件是myDataSet.xsd文件的一個引用,該文件也被添加到“解決方案資源管理器” 窗口中。到此,準備工作結(jié)束。我們就可以將數(shù)據(jù)集綁定給控件來顯示數(shù)據(jù)集中所包含的數(shù)據(jù)了

24、。2.綁定到DataGrid控件(1)在窗體中增加一個DataGrid控件,調(diào)整其大小與窗體相符。并對應以下設置修改其相關屬性:DataSource屬性為myDataSet1;Datamember屬性為student。完成上述步驟,即將數(shù)據(jù)集綁定到數(shù)據(jù)網(wǎng)格控件中了。只需再完成一個步驟,就可以看到數(shù)據(jù)網(wǎng)格控件中顯示的數(shù)據(jù)了。(2)雖然數(shù)據(jù)網(wǎng)格控件已被綁定到數(shù)據(jù)集上,但加載窗體時并不會自動填充數(shù)據(jù)集。加載窗體時,請使用窗體的Load事件過程,在數(shù)據(jù)網(wǎng)格控件中填充數(shù)據(jù)。代碼如下:Private Sub frmtest_Load( ByVal sender As System.Object, _ByV

25、al e As System.EventArgs) Handles MyBase.Load'加載數(shù)據(jù)網(wǎng)格控件MyDataSet1.Clear()OleDbDataAdapter1.Fill(mydataset1,student)End Sub在Load事件過程中,首先需要清除數(shù)據(jù)集,然后用先前創(chuàng)建的OleDbDataAdapter1對象的Fill方法填充數(shù)據(jù)集。需要將表名傳遞給第二個參數(shù),因為數(shù)據(jù)網(wǎng)格控件將使用第二個參數(shù)檢索以前在DataMember屬性中指定的正確DataMember (student)。(3)現(xiàn)在,我們可以來看看我們的成果了,試運行一下程序。在“解決方案資源管理器”

26、窗口中,右擊項目名稱,從快捷菜單中選擇“屬性”命令,在打開的對話框中點擊“啟動對象”組合框并從列表中選擇“frmtest”選項。然后點擊“確定”按鈕。最后按下F5鍵即可運行此項目。3.綁定到TextBox控件在上面我們介紹的實例窗體frmtest上刪除DataGrid控件,并清除frmtest_Load中的代碼。按照圖所示設計程序界面。上圖中各控件相關屬性是:(圖) (其余的控件,我們將在下面的內(nèi)容中用到。)界面創(chuàng)建完成以后,我們就可以把數(shù)據(jù)集綁定到每個TextBox控件上了。步驟如下:(1)選擇要綁定的TextBox控件。按下F4鍵查看其“屬性” 窗口。點擊展開“DataBindings”屬

27、性,在“DataBindings” 中選擇Text屬性。(2)打開組合框并將各個文本框綁定到相應的字段。如需要將“TxtStuID”文本框綁定到StuID字段,請點擊myDataSet1上的“+”號,再點擊 student上的“+”號,然后選擇StuID字段。(3)按照上述方法把其他幾個文本框綁定到相應的字段上。需要說明的是:雖然已綁定各個字段但還必須編寫代碼才能在首次加載窗體時用數(shù)據(jù)填充窗體。代碼如下:Private Sub frmtest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyB

28、ase.LoadMyDataSet1.Clear()OleDbDataAdapter1.Fill(MyDataSet1, student)End Sub按下F5鍵試運行一下程序。仔細觀察一下運行結(jié)果我們就會發(fā)現(xiàn),程序在實現(xiàn)時自動用數(shù)據(jù)集中的第一條記錄來填充各件控件。(三)用代碼實現(xiàn)數(shù)據(jù)綁定上面我們著重探討了控件與數(shù)集據(jù)綁定的向?qū)J健_@種模式雖然實現(xiàn)方法簡單,但是卻不靈活,可移植性較差。為此,我們?yōu)榇蠹医榻B如何用代碼來實現(xiàn)數(shù)據(jù)綁定。用代碼實現(xiàn)數(shù)據(jù)綁定的優(yōu)點在于靈活自由,代碼移植方便。為了便于更好的理解,我們?nèi)匀贿x用“TextBox”控件作為實例來介紹。1.綁定到TextBox控件(1)界面設計

29、:新建一個項目,按照圖的方法設置程序界面,再增加一個Button控件,將其“Text“屬性設為“TextBox數(shù)據(jù)綁定”。(2)代碼實現(xiàn):'指定程序中引用的名稱空間:在代碼窗中輸入:Imports System.DrawingImports System.Windows.FormsImports System.ComponentModelImports SystemImports System.Data.OleDb Imports System.Data'首先定義全局變量myDataSet及GetConnected()方法,代碼如下:Public Class Form1Inhe

30、rits FormPrivate WithEvents Button1 As ButtonPrivate TextBox1 As TextBox(省略部分自動生成代碼) Private myDataSet As DataSetPrivate components As System.ComponentModel.ContainerPublic Sub New()MyBase.New()GetConnected() '這個過程是用于建立連接,打開數(shù)據(jù)庫InitializeComponent()End Sub'清除在程序中使用過的資源 Protected Overloads Ove

31、rrides Sub Dispose(ByVal disposing As Boolean)(省略部分自動生成代碼)End Sub''為GetConnected()方法增加代碼,用來打開數(shù)據(jù)表,返回數(shù)據(jù)集。Public Sub GetConnected()'創(chuàng)建一個 OleDbConnectionDim ConnectionString As String = Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:My Documentsdb1.mdbDim myConn As OleDbConnection = New

32、 OleDbConnection()myConn.ConnectionString = ConnectionStringDim strCom As String = SELECT * FROM student '創(chuàng)建一個 DataSetmyDataSet = New DataSet()myConn.Open()'用 OleDbDataAdapter 得到一個數(shù)據(jù)集Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter(strCom, myConn)'把Dataset綁定student數(shù)據(jù)表myCommand.Fi

33、ll(myDataSet, student)'關閉此OleDbConnectionmyConn.Close()End Sub'初始化窗體中的組件Private Sub InitializeComponent()(省略部分自動生成代碼)End Sub'將各個文本框控件綁定到數(shù)據(jù)庫的各個字段。Private Sub Button1_Click(ByVal sender As Object, _ByVal e As System.EventArgs) Handles Button1.ClickTxtStuID.DataBindings.Add(New Binding(Text

34、, Me.myDataSet, student.StuID)TxtStuName.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuName)TxtStuSex.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuSex)TxtStuBorn.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuBorn)TxtStuCore.DataBindings.Add(New Binding(Text

35、, Me.myDataSet, student.StuCore)End SubEnd ClassModule Module1Sub Main()Application.Run(New Form1()End SubEnd Module編譯后運行程序,看看是不是與上面介紹的實例運行結(jié)果相同。在上面的代碼中,我們新建了一個GetConnected()過程,用于建立連接,打開數(shù)據(jù)庫。在用代碼實現(xiàn)數(shù)據(jù)綁定或者對數(shù)據(jù)庫進行任何操作前,就必須要先建立連接,打開數(shù)據(jù)庫,程序運行結(jié)束后再關閉數(shù)據(jù)連接。在Button1_Click過程中,我們把“TextBox”控件綁定到數(shù)據(jù)集myDataSet中“student

36、”的各個字段上。程序運行后,點擊“TextBox數(shù)據(jù)綁定”按紐,程序就會用myDataSet中“student”中的數(shù)據(jù)來自動填充文本框。2.綁定到Label控件有了上面的內(nèi)容做基礎,再來討論如何把數(shù)據(jù)集綁定到Label控件上就顯得很簡單了。把數(shù)據(jù)綁定到Label控件的方法與綁定到TextBox控件的方法大同小異。此處不再詳細講解,只給出代碼實現(xiàn)綁定到Label控件的核心部分代碼。Private Sub Button1_Click (ByVal sender As Object , _ByVal e As System.EventArgs ) Handles Button1.Click'

37、;把student表的StuName字段綁定到Label1的Text屬性上。Label1.DataBindings.Add ( New Binding ( Text , Me.myDataSet , student.StuName ) ) End Sub3.綁定到ComboBox控件上面介紹的是對組件的簡單數(shù)據(jù)綁定,對組件的復雜數(shù)據(jù)綁定和它有所區(qū)別,也有所相同,具體如下: (1)要對ComboBox組件實現(xiàn)數(shù)據(jù)綁定,首先也是要打開數(shù)據(jù)表,得到數(shù)據(jù)集。這和上面TextBox組件的代碼大致一樣,在此略過。 (2)實現(xiàn)數(shù)據(jù)綁定:設定了ComboBox組件的三個屬性就可以實現(xiàn)數(shù)據(jù)綁定了,這三個屬性是“

38、DataSource”、“DisplayMember”、 “ValueMember”。其中DataSource表示指定的數(shù)據(jù)集;DisplayMember表示ComboBox組件顯示的字段值; ValueMember表示ComboBox組件選擇后的值。這三個屬性的具體使用方法如下:ComboBox1.DataSource = Me.myDataSetComboBox1.DisplayMember = studnet.StuNameComboBox1.ValueMember = studnet.StuName 下面我們就來看看把數(shù)據(jù)集綁定到ComboBox控件的核心代碼:Private Sub

39、Button1_Click ( ByVal sender As Object , _ByVal e As System.EventArgs ) Handles Button1.ClickComboBox1.DataSource = Me.myDataSetComboBox1.DisplayMember = student.StuNameComboBox1.ValueMember = student.StuName End Sub注意:對ComboBox控件進行數(shù)據(jù)綁定的方法同樣適用于ListBox控件,因此關于LisBox控件數(shù)據(jù)綁定方法本文將不再介紹。需要者請參閱ComboBox相關內(nèi)容。三

40、、數(shù)據(jù)庫簡單操作前面介紹了ADO.NET基礎,以及ADO.NET與Windows窗體控件的綁定方法。但是,對于數(shù)據(jù)庫編程我們更想了解的還是如何增加記錄,刪除記錄,更新記錄等數(shù)據(jù)庫記錄的操作方法。這里我們將以一個具體的實例為大家介紹這些操作方法。在圖3中,有btnFirst(第一個記錄),btnEnd(最后一條記錄),btnAdd(增加記錄),btnDel(刪除記錄),btnEdit(修改記錄)控件。用代碼形式打開數(shù)據(jù)并在frmtest_load中把數(shù)據(jù)綁定給TextBox控件。此處給出源代碼:'打開數(shù)據(jù)庫Public Sub OpenData()'創(chuàng)建一個 OleDbConne

41、ctionDim ConnectionString As String = Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:My Documentsdb1.mdbDim myConn As OleDbConnection = New OleDbConnection()myConn.ConnectionString = ConnectionStringDim strCom As String = SELECT * FROM student '創(chuàng)建一個 DataSetmyDataSet = New DataSet()myConn.Op

42、en()'用 OleDbDataAdapter 得到一個數(shù)據(jù)集Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter(strCom, myConn)'把Dataset綁定student數(shù)據(jù)表myCommand.Fill(myDataSet, student)'關閉此OleDbConnectionmyConn.Close()End Sub'綁定數(shù)據(jù)到TextBox控件Private Sub frmtest_Load(ByVal sender As System.Object, ByVal e As Syst

43、em.EventArgs) Handles MyBase.LoadtxtStuID.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuID)txtStuName.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuName)txtStuSex.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuSex)txtStuBorn.DataBindings.Add(New Binding(Text,

44、 Me.myDataSet, student.StuBorn)txtStuCore.DataBindings.Add(New Binding(Text, Me.myDataSet, student.StuCore)End Sub完成以上步驟后,我們就可以通過編程對數(shù)據(jù)庫進行各作操作了。1.實現(xiàn)對數(shù)據(jù)記錄的瀏覽在完成對窗體中的WinForm組件進行綁定后,實現(xiàn)對數(shù)據(jù)記錄的瀏覽操作的關鍵就是要找到如何定位數(shù)據(jù)記錄指針的方法。而要實現(xiàn)這種處理就需要用到. NET FrameWork SDK中的名稱空間System.Windows.Froms中的BindingManagerBase類。BindingM

45、anagerBase是一個抽象的類,主要用于管理同一數(shù)據(jù)表所有綁定對象。BindingManagerBase類中定義了二個屬性 “position”和“Count”,第一個屬性是定義當前數(shù)據(jù)指針,而第二個屬性主要是得到當前數(shù)據(jù)集有多少記錄數(shù)目。在已經(jīng)進行完數(shù)據(jù)綁定后,通過這兩個屬性配合使用,實現(xiàn)對數(shù)據(jù)記錄的瀏覽。(1)向上翻閱一條記錄:雙擊“上一條”按鈕,在代碼窗中輸入以下代碼:Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious

46、_.ClickMe.BindingContext(myDataSet, student).Position -= 1End Sub(2)向下翻閱一條記錄:雙擊“下一條”按鈕在代碼窗中輸入以下代碼:Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesbtnNext.ClickMe.BindingContext(myDataSet, student).Position += 1End Sub(3)翻到最后一條記錄:雙擊“最后一條記錄”按鈕,在代碼窗中輸入以下代碼:P

47、rivate Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.ClickMe.BindingContext(myDataSet, student).Position = Me.BindingContext(myDataSet, student).Count - 1End Sub(4)翻閱到第一條記錄:雙擊“第一條記錄”按鈕,在代碼窗中輸入以下代碼:Private Sub btnFirst_Click(ByVal sender As System.Object,

48、 ByVal e As System.EventArgs) Handles btnFirst.ClickMe.BindingContext(myDataSet, student).Position = 0End Sub說明:為了代碼書寫方便,我們可以先定義一個BindingManagerBase對象myBind,如myBind = Me.BindingContext (myDataSet, student ),于是以上各句代碼均可以簡寫成:向上翻閱一條記錄:myBind.Position = myBind.Position - 1向下翻閱一條記錄:myBind.Position = myBin

49、d.Position + 1翻閱到最后一條記錄:myBind.Position=myBind.count - 1翻閱到第一條記錄:myBind.Position = 02.刪除數(shù)據(jù)記錄雙擊“刪除記錄”按鈕,在代碼窗中輸入以下代碼:Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.ClickDim ConnectionString As String = Provider = Microsoft.Jet.OLEDB.4.0; Data Source

50、 = e:My Documentsdb1.mdbDim myConn As OleDbConnection = New OleDbConnection()myConn.ConnectionString = ConnectionStringmyConn.Open()Dim strDele As String = DELETE From student WHERE StuID = ' + txtStuID.Text + ' Dim myCommand As OleDbCommand = New OleDbCommand(strDele, myConn)myCommand.Execu

51、teNonQuery() myDataSet.Tables(student).Rows(Me.BindingContext(myDataSet, student).Position).Delete()myDataSet.Tables(student).AcceptChanges()10.myConn.Close()End Sub前面四行代碼我們已經(jīng)非常熟悉,目的是建立與數(shù)據(jù)據(jù)的連接并打開數(shù)據(jù)庫。第6行代碼我們建立一個SQL查詢,用來查詢數(shù)據(jù)表中StuID字段值等于 TxtStuID.Text輸入值的所有記錄。并在第7行代碼中將查詢結(jié)果建立一個新的OleDbCommand對象,用來指定要刪除的記

52、錄。第8行代碼是從數(shù)據(jù)庫中刪除指定的記錄,第9行代碼是從myDataSet中刪除記錄。前者是物理上刪除記錄,如果去掉第8行代碼運行程序你就會發(fā)現(xiàn),記錄只是在當前操作中被刪除了,在數(shù)據(jù)庫中依然存在。其中第6行代碼中定義的SQL查詢條件讀者可以根據(jù)需要自行指定。需要說明的是,由于我們在創(chuàng)建數(shù)據(jù)表時,指定StuID字段的類型為Text類型,因此在書寫SQL語名時要在“”號前加上單引號,具體格式請參照第6行代碼。如果StuID字段類型為數(shù)字型,那么第6行正確寫法應該為:Dim strDele As String = DELETE From student WHERE StuID = + txtStuI

53、D.Text 3.修改數(shù)據(jù)記錄修改數(shù)據(jù)的方法有很多,本文中我們將以采用SQL語言來修改數(shù)據(jù)記錄為例詳細介紹一下如何修改數(shù)據(jù)記錄。下面我們先看看程序代碼:Dim ConnectionString As String = Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:My Documentsdb1.mdbDim myConn As OleDbConnection = New OleDbConnection()myConn.ConnectionString = ConnectionStringmyConn.Open()'以上代碼用來連接數(shù)據(jù)源myDataSet.Tables(student).Rows(Me.BindingContext(myDataSet, student).Position).BeginEdit()'利用SQL語句創(chuàng)建數(shù)據(jù)更新集合Dim StrUpdate As String = Update student SET StuName=' + txt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論