VB.Net數據庫訪問

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

Microsoft ActiveX Data Objects.Net(ADO.Net)是一個模型,是.NET應用程序用於檢索,訪問和更新數據的.Net框架的一部分。

ADO.Net對象模型

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

VB.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)是數據的內存中表示。 它是從數據庫中檢索的一個斷開的,高速緩存的一組記錄。 與數據庫建立連接後,數據適配器將創建一個數據集並在其中存儲數據。 在數據被檢索並存儲在數據集中之後,與數據庫的連接被關閉。這被稱爲「斷開連接的架構」。 該數據集作爲包含表,行和列的虛擬數據庫運行。

下圖顯示了數據集對象模型:

VB.Net數據庫訪問

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 的數據庫),參考以下步驟:

  • 選擇工具 -> 連接到數據庫,如下圖所示 -

VB.Net數據庫訪問

  • 在「添加連接」對話框中選擇一個服務器名稱(這是裏:MY-PC)和數據庫名稱。如下圖所示 -

VB.Net數據庫訪問

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

VB.Net數據庫訪問

  • 在窗體上添加一個DataGridView

VB.Net數據庫訪問

  • 點擊選擇數據源組合框。沒有任何數據源的情況下如下所示 -

VB.Net數據庫訪問

  • 在上圖中,點擊添加項目數據源鏈接。

  • 這將打開數據源配置嚮導。選擇數據庫 作爲數據源類型。然後下一步 -

VB.Net數據庫訪問

  • 選擇數據集作爲數據庫模型。如下圖所示 -

VB.Net數據庫訪問

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

VB.Net數據庫訪問

  • 保存連接字符串。如下圖所示 -

VB.Net數據庫訪問

  • 在這個示例中選擇數據庫對象customers表,然後單擊完成 按鈕。如下圖所示 -

VB.Net數據庫訪問

  • 選擇預覽數據 鏈接以查看網格中的數據,如下圖所示 -

VB.Net數據庫訪問

當使用Microsoft Visual Studio工具欄上的「開始」按鈕運行應用程序時,它將顯示以下窗口:

VB.Net數據庫訪問

示例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 = "yiibai.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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:

VB.Net數據庫訪問

單擊從數據庫表加載數據按鈕將顯示數據網格視圖控件上的表格:

VB.Net數據庫訪問

創建表,列和行

前面我們已經討論過,像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 = "從數據庫表中加載數據示例 - yiibai.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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:

VB.Net數據庫訪問

單擊「從數據庫表中加載數據」按鈕將顯示數據網格視圖控件上的表格:

VB.Net數據庫訪問