VB.Net資料庫存取


應用程式與資料庫進行通訊,首先檢索儲存在資料庫中的資料,並以便於使用者使用的方式顯示;其次,通過插入,修改和刪除資料來更新資料庫中的資料。

Microsoft ActiveX Data Objects.Net(ADO.Net)是一個模型,是.NET應用程式用於檢索,存取和更新資料的.Net框架的一部分。

ADO.Net物件模型

ADO.Net物件模型不過是通過各種元件的結構化流程流程。物件模型可以描述如下圖所示:

在資料儲存或資料庫中的資料通過資料提供者(DataProvider)檢索。資料提供者的各種元件檢索應用程式的資料並更新資料。

應用程式通過資料集或資料讀取器存取資料。

  • 資料集(Datasets)將資料儲存在已斷開連線的快取中,應用程式將從中檢索資料。
  • 資料讀取器(Data readers)以唯讀和只進模式向應用程式提供資料。

資料提供者

資料提供者用於連線到資料庫,執行命令和檢索資料,將其儲存在資料集中,讀取檢索到的資料並更新資料庫。

ADO.Net中的資料提供者由以下四個物件組成:

編號 物件 描述
1 Connection 該元件用於與資料源建立連線。
2 Command 命令是用於檢索,插入,刪除或修改資料源中的資料的SQL語句或儲存過程。
3 DataReader 資料讀取器用於以唯讀和只進模式從資料源檢索資料。
4 DataAdapter 這對ADO.Net的工作是不可或缺的,因為資料通過資料介面卡傳輸到資料庫和從資料庫傳輸。它從資料庫檢索資料到資料集並更新資料庫。對資料集進行更改時,資料庫中的更改實際上是由資料介面卡完成的。

ADO.Net中包含以下不同型別的資料提供程式 -

  • SQL Server的.Net Framework資料提供程式 - 提供對Microsoft SQL Server的存取。
  • OLE DB的.Net Framework資料提供程式 - 提供對使用OLE DB公開的資料源的存取。
  • 用於ODBC的.Net Framework資料提供程式 - 提供對由ODBC公開的資料源的存取。
  • Oracle的.Net Framework資料提供程式 - 提供對Oracle資料源的存取。
  • EntityClient提供者 - 允許通過實體資料模型(EDM)應用程式存取資料。

資料集(DataSet)

資料集(DataSet)是資料的記憶體中表示。 它是從資料庫中檢索的一個斷開的,快取記憶體的一組記錄。 與資料庫建立連線後,資料介面卡將建立一個資料集並在其中儲存資料。 在資料被檢索並儲存在資料集中之後,與資料庫的連線被關閉。這被稱為「斷開連線的架構」。 該資料集作為包含表,行和列的虛擬資料庫執行。

下圖顯示了資料集物件模型:

DataSet類存在於System.Data名稱空間中。下表介紹了DataSet的所有元件:

編號 元件 描述
1 DataTableCollection 它包含從資料源檢索的所有表。
2 DataRelationCollection 它包含資料集中表之間的關係和連結。
3 ExtendedProperties 它包含額外的資訊,如用於檢索資料的SQL語句,檢索時間等。
4 DataTable 它表示資料集DataTableCollection中的一個表。它是由DataRowDataColumn物件組成。DataTable物件區分大小寫。
5 DataRelation 它表示資料集DataRelationshipCollection中的關係。 它用於通過DataColumn物件將兩個DataTable物件相互關聯。
6 DataRowCollection 它包含DataTable中的所有行。
7 DataView 它代表一個DataTable的固定客製化檢視,用於排序,過濾,搜尋,編輯和導航。
8 PrimaryKey 它表示唯一標識DataTable中的行的列。
9 DataRow 它表示DataTable中的一行。 DataRow物件及其屬性和方法用於檢索,評估,插入,刪除和更新DataTable中的值。 NewRow方法用於建立新行,Add方法向表中新增一行。
10 DataColumnCollection 它代表DataTable中的所有列。
11 DataColumn 它由組成DataTable的列陣列成。

連線到資料庫

.Net框架提供了兩種型別的連線類:

  • SqlConnection - 用於連線到Microsoft SQL Server。
  • OleDbConnection - 設計用於連線到各種資料庫,如Microsoft Access和Oracle。

範例1

在名為testDB的資料庫中有一個名為Customers的儲存在Microsoft SQL Server中的表。請參閱SQL Server教學在SQL Server中建立資料庫和資料庫表。

下面演示如何連線到這個資料庫(假設已經建立好了一個名稱為:testdb 的資料庫),參考以下步驟:

  • 選擇工具 -> 連線到資料庫,如下圖所示 -

  • 在「新增連線」對話方塊中選擇一個伺服器名稱(這是裡:MY-PC)和資料庫名稱。如下圖所示 -

  • 點選測試連線 按鈕,檢查連線是否成功。成功如下圖所示 -

  • 在表單上新增一個DataGridView

  • 點選選擇資料源下拉式方塊。沒有任何資料源的情況下如下所示 -

  • 在上圖中,點選新增專案資料源連結。

  • 這將開啟資料源組態嚮導。選擇資料庫 作為資料源型別。然後下一步 -

  • 選擇資料集作為資料庫模型。如下圖所示 -

  • 選擇已經建立的連線。如下圖所示 -

  • 儲存連線字串。如下圖所示 -

  • 在這個範例中選擇資料庫物件customers表,然後單擊完成 按鈕。如下圖所示 -

  • 選擇預覽資料 連結以檢視網格中的資料,如下圖所示 -

當使用Microsoft Visual Studio工具列上的「開始」按鈕執行應用程式時,它將顯示以下視窗:

範例2

在這個例子中,將演示如何使用程式碼存取DataGridView控制元件中的資料(建立一個新的專案:DatabaseAccess2)。參考以下步驟:

  • 在表單中新增一個DataGridView控制元件和一個按鈕。
  • 將按鈕控制元件的文字更改為「從資料庫表載入資料」

雙擊按鈕控制元件為按鈕的Click事件新增所需的程式碼,如下所示:

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) _
    Handles MyBase.Load
        'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table.   You can move, or remove it, as needed.
        'Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS)

        ' Set the caption bar text of the form.   
        'Me.Text = "tw511.com"
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim connection As SqlConnection = New SqlConnection()
        connection.ConnectionString = "Data Source=MY-PC;Initial Catalog=testdb;Integrated Security=True"
        connection.Open()
        Dim adp As SqlDataAdapter = New SqlDataAdapter _
        ("select * from customers", connection)
        Dim ds As DataSet = New DataSet()
        adp.Fill(ds)
        DataGridView1.DataSource = ds.Tables(0)
    End Sub
End Class

當上面的程式碼執行並使用Microsoft Visual Studio工具列上的「開始」按鈕執行時,它將顯示以下視窗:

單擊從資料庫表載入資料按鈕將顯示資料網格檢視控制元件上的表格:

建立表,列和行

前面我們已經討論過,像DataTableDataColumnDataRow這樣的DataSet元件可用於分別建立表,列和行。

以下範例3中演示了這個概念。

範例3

到目前為止,我們已經使用了計算機中已有的資料庫和表。 在這個例子中,將建立一個表,向其中新增列,行和資料,並使用DataGridView物件顯示該錶結構和資料記錄。建立一個名稱為:DatabaseAccess3 的專案。

參考以下步驟:

  • 在表單中新增一個DataGridView控制元件和一個按鈕。
  • 將按鈕控制元件的Text屬性值更改為「從資料庫表中載入資料」

在程式碼編輯器中新增下面的程式碼。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Set the caption bar text of the form.   
        Me.Text = "從資料庫表中載入資料範例 - tw511.com"
    End Sub

    Private Function CreateDataSet() As DataSet
        'creating a DataSet object for tables
        Dim dataset As DataSet = New DataSet()
        ' creating the student table
        Dim Students As DataTable = CreateStudentTable()
        dataset.Tables.Add(Students)
        Return dataset
    End Function

    Private Function CreateStudentTable() As DataTable
        Dim Students As DataTable
        Students = New DataTable("Student")
        ' adding columns
        AddNewColumn(Students, "System.Int32", "StudentID")
        AddNewColumn(Students, "System.String", "StudentName")
        AddNewColumn(Students, "System.String", "StudentCity")
        ' adding rows
        AddNewRow(Students, 1, "牛大大", "北京")
        AddNewRow(Students, 2, "張培勝", "上海")
        AddNewRow(Students, 3, "李喬森", "深圳")
        AddNewRow(Students, 4, "王小達", "廣州")
        AddNewRow(Students, 5, "Maxsu", "海口")
        Return Students
    End Function

    Private Sub AddNewColumn(ByRef table As DataTable,
    ByVal columnType As String, ByVal columnName As String)
        Dim column As DataColumn =
         table.Columns.Add(columnName, Type.GetType(columnType))
    End Sub

    'adding data into the table
    Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,
        ByRef name As String, ByRef city As String)

        Dim newrow As DataRow = table.NewRow()
        newrow("StudentID") = id
        newrow("StudentName") = name
        newrow("StudentCity") = city
        table.Rows.Add(newrow)
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        ds = CreateDataSet()
        DataGridView1.DataSource = ds.Tables("Student")
    End Sub
End Class

當上面的程式碼執行並使用Microsoft Visual Studio工具列上的「開始」按鈕執行時,它將顯示以下視窗:

單擊「從資料庫表中載入資料」按鈕將顯示資料網格檢視控制元件上的表格: