面向數據庫編程始終是程序設計的一個難點和重點,VB.NET和C#一樣自身是不具備對數據庫進行操作的功能,他們對數據庫的處理是通過.Net FrameWork SDK中面向數據庫編程的類庫和微軟的MDAC來實現的。在上一篇文章《探討VB.Net中的數據綁定》中,我們已經探討了數據綁定技術,這對于我們下面進行數據庫編程是非常重要的。由于數據庫編程中所包含的內容十分豐富,這是一篇文章所難以包容的。本文就來探討一下用VB.NET進行數據庫的基礎編程,即:用VB.NET如何實現對數據的瀏覽,如何添加、插入記錄,如何刪除記錄和如何更改記錄。
一.程序設計和運行的環境設置:
(1).視窗2000服務器版
(2).Microsoft Data Acess Component 2.6 以上版本 ( MDAC 2.6 )
(3)..Net FrameWork SDK Beta 2
二.數據庫的數據字典:
為了更全面的介紹,在數據庫的選取方面,選取了二種典型的數據庫,其一是本地數據庫,也就是本文主要介紹的的數據庫Access 2000;另外一個是遠程數據庫SQL Server 2000。其中Access 2000的數據庫名稱是"db.mdb",在此數據庫中只存放了一張數據表"person",此數據表結構如下:
字段名稱字段類型字段意思id數字序號xm文本姓名xb文本性別nl文本年齡zip文本郵政編碼
遠程數據庫Sql Server 2000的數據庫服務器名稱為"Server1",數據庫名稱為"Data1",登陸的ID為"sa",口令為空,在數據庫也只存放了一張"person"數據表,數據結構大致如上。
三.VB.NET如何實現對數據記錄的瀏覽:
在完成對窗體中的WinForm組件進行綁定過以后,實現對數據記錄的瀏覽操作的關鍵就是要找到如何定位數據記錄指針的方法。而要實現這種處理就需要用到.Net FrameWork SDK中的名稱空間System.Windows.Froms中的BindingManagerBase類了,BindingManagerBase是一個抽象的類,他主要管理對于綁定同一數據表所有綁定對象。BindingManagerBase類中定義了二個屬性"position"和"Count",第一個屬性是定義當前數據指針,而第二個屬性主要是得到當前數據集有多少記錄數目。在已經進行完數據綁定后,通過這二個屬性的配合使用,實現對數據記錄的瀏覽。那么如何創建一個屬于自己的BindingManagerBase對象,這就要使用到另外一個類--BindingContext。其實對于那些屬于從Control類中繼承對象的BindingManagerBase都是由BindingContext來創建的,下面以Access 2000為操作數據庫,創建的一個名稱為"myBind"的BindingManagerBase對象的具體例子。
'創建一個數據連接 Dim strCon As String = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " Dim myConn As OleDbConnection = New OleDbConnection ( ) myConn.ConnectionString = strCon Dim strCom As String = " SELECT * FROM person " '創建一個 DataSet myDataSet = New DataSet ( ) myConn.Open ( ) '通過OleDbDataAdapter對象得到一個數據集 Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter ( strCom , myConn ) '把Dataset綁定books數據表 myCommand.Fill ( myDataSet , "person" ) '關閉此數據連接 myConn.Close ( ) '創建BindingManagerBase對象 myBind = Me.BindingContext ( myDataSet , "person" )
對于SQL Server數據庫,創建BindingManagerBase對象和Access 2000大致相同,唯一不同的就在于創建數據連接的時候,下面是以SQL Server 2000為操作數據庫,數據庫服務器名稱為"Server1",數據庫名稱為"Data1",登陸的ID為"sa",口令為空,在數據庫也只存放了一張"person"數據表,創建BindingManagerBase對象的程序代碼:
'創建一個數據連接 Dim strCon As String = " Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " Dim myConn As OleDbConnection = New OleDbConnection ( ) myConn.ConnectionString = strCon Dim strCom As String = " SELECT * FROM person " '創建一個 DataSet myDataSet = New DataSet ( ) myConn.Open ( ) '通過OleDbDataAdapter對象得到一個數據集 Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter ( strCom , myConn ) '把Dataset綁定books數據表 myCommand.Fill ( myDataSet , "person" ) '關閉此數據連接 myConn.Close ( ) '創建BindingManagerBase對象 myBind = Me.BindingContext ( myDataSet , "person" )
在得到BindingManagerBase對象后,配合使用"position"屬性和"Count"屬性,就可以實現對數據集的瀏覽了,下面是對數據集進行"上一條"、"下一條"、"尾記錄"、"首記錄"。
'按鈕"尾記錄"對象事件程序 Private Sub lastrec_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles lastrec.Click myBind.Position = myBind.Count - 1 End Sub '按鈕"下一條"對象事件程序 Private Sub nextrec_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles nextrec.Click If myBind.Position = myBind.Count - 1 Then MessageBox.Show ( "已經到了最后一條記錄!" , "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) Else myBind.Position = myBind.Position + 1 End If End Sub '按鈕"上一條"對象事件程序 Private Sub previousrec_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles previousrec.Click If ( myBind.Position = 0 ) Then MessageBox.Show ( "已經到了第一條記錄!" , "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) Else myBind.Position = myBind.Position - 1 End If End Sub '按鈕"首記錄"對象事件程序 Private Sub firstrec_Click ( ByVal sender As Object , _ ByVal e As System.EventArgs ) Handles firstrec.Click myBind.Position = 0 End Sub
四.VB.NET來刪除數據記錄:
在做程序的時候,我們可能有這樣的迷惑就是,我們操作的數據集是返回的DataSet對象,如果此時的DataSet對象十分龐大,或者連接到此數據庫服務器的客戶非常多,這樣就會耗費服務器的很多資源,久而久之服務器總有一天可能會崩潰。其實這種擔心是沒有必要的,因為我們操作的DataSet對象其實產生的位置并不在服務器端,而是客戶端,這樣上面的幾種顧慮就顯得沒有必要了。但在對數據庫進行刪除、修改等操作,我們此時操作的對象是服務器端的數據庫,并沒有修改到本地的DataSet對象,所以當進行刪除、修改操作的時候,為了數據一致,在對服務器端的數據庫進行刪除、修改后,依然要對本地的DataSet對象進行相關操作。根據上面的這些知識,就可以分別得到針對Access 2000和Sql Server 2000數據庫進行刪除操作的程序代碼:
< I > .刪除Access 2000數據庫中的記錄:
Private Sub button4_Click (ByVal sender As Object , _ ByVal e As System.EventArgs) Handles button4.Click '連接到一個數據庫 Dim strCon As String = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " Dim myConn As OleDbConnection = New OleDbConnection ( strCon ) myConn.Open ( ) Dim strDele As String = "DELETE FROM person WHERE id= " + t_id.Text Dim myCommand As OleDbCommand = New OleDbCommand ( strDele , myConn ) '從數據庫中刪除指定記錄 myCommand.ExecuteNonQuery ( ) '從DataSet中刪除指定記錄 myDataSet.Tables ( "person" ).Rows ( myBind.Position ).Delete ( ) myDataSet.Tables ( "person" ).AcceptChanges ( ) myConn.Close ( ) End Sub
< II > .刪除Sql Server 2000數據庫中的記錄:
Private Sub button4_Click (ByVal sender As Object , _ ByVal e As System.EventArgs) Handles button4.Click '連接到一個數據庫 Dim strCon As String = " Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " Dim myConn As OleDbConnection = New OleDbConnection ( strCon ) myConn.Open ( ) Dim strDele As String = "DELETE FROM person WHERE id= " + t_id.Text Dim myCommand As OleDbCommand = New OleDbCommand ( strDele , myConn ) '從數據庫中刪除指定記錄 myCommand.ExecuteNonQuery ( ) '從DataSet中刪除指定記錄 myDataSet.Tables ( "person" ).Rows ( myBind.Position ).Delete ( ) myDataSet.Tables ( "person" ).AcceptChanges ( ) myConn.Close ( ) End Sub
五.VB.NET來修改數據記錄:
掌握了SQL語句,并且掌握了上面刪除數據記錄的實現過程過以后,用VB.NET來修改數據記錄就顯得并不十分困難了。下面就是以Access 2000為操作數據庫實現記錄修改的代碼,如下:
Private Sub button3_Click (ByVal sender As Object , _ ByVal e As System.EventArgs) Handles button3.Click Dim i As Integer = myBind.Position '連接到一個數據庫 Dim strCon As String = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " Dim myConn As OleDbConnection = New OleDbConnection ( strCon ) myConn.Open ( ) myDataSet.Tables ( "person" ).Rows ( myBind.Position ).BeginEdit ( ) '從數據庫中修改指定記錄 Dim strUpdt As String = " UPDATE person SET xm = '" _ + t_xm.Text + "' , xb = '" _ + t_xb.Text + "' , nl = " _ + t_nl.Text + " , zip = " _ + t_books.Text + " WHERE id = " + t_id.Text Dim myCommand As OleDbCommand = New OleDbCommand ( strUpdt , myConn ) myCommand.ExecuteNonQuery ( ) myDataSet.Tables ( "person" ).Rows ( myBind.Position ).EndEdit ( ) myDataSet.Tables ( "person" ).AcceptChanges ( ) myConn.Close ( ) myBind.Position = i End Sub
在介紹完上面這二個典型的數據操作后,我們不難發現,其實對數據庫進行編程,選取什么樣的數據庫類型對于程序開發并不是十分主要的,因為在用VB.NET進行數據庫開發的時候,對不同數據庫,其開發代碼的主要區別只在于數據鏈接的不同,所以在此就不單獨介紹用VB.NET對Sql Server 2000進行修改記錄操作的代碼了。我想這應該不是很難吧。
六.VB.NET來插入數據記錄:
往數據庫中插入記錄和修改記錄和刪除記錄基本上差不多,主要也是利用SQL語句,下面是以Access 2000為操作數據庫,進行插入記錄的代碼:
Private Sub button2_Click (ByVal sender As Object , _ ByVal e As System.EventArgs) Handles button2.Click '判斷所有字段是否添完,添完則執行,反之彈出提示 If ( t_id.Text <> "" And t_xm.Text <> "" And t_xb.Text <> "" And t_nl.Text <> "" And t_books.Text <> "" ) Then Dim myConn1 As String = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" Dim myConn As OleDbConnection = New OleDbConnection ( myConn1 ) myConn.Open ( ) Dim strInsert As String = " INSERT INTO person ( id , xm , xb , nl , zip ) VALUES ( " & _ t_id.Text + " , '" & _ t_xm.Text + "' , '" & _ t_xb.Text + "' , " & _ t_nl.Text + " , " & _ t_books.Text + ")" Dim inst As OleDbCommand = New OleDbCommand ( strInsert , myConn ) inst.ExecuteNonQuery ( ) myConn.Close ( ) myDataSet.Tables ( "person" ).Rows ( myBind.Position ).BeginEdit ( ) myDataSet.Tables ( "person" ).Rows ( myBind.Position ).EndEdit ( ) myDataSet.Tables ( "person" ).AcceptChanges ( ) Else MessageBox.Show ( "必須填滿所有字段值!" , "錯誤!" ) End IfEnd Sub
同樣對Sql Server 2000數據庫進行插入記錄操作和Access 2000數據庫插入記錄操作的差異也只在于不同的數據鏈接,具體的代碼可以參考"刪除數據記錄"中的代碼,在這里就不提供了。(出處:賽迪網)
|