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
中的一個表。它是由DataRow
和DataColumn
對象組成。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 = "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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:
單擊從數據庫表加載數據按鈕將顯示數據網格視圖控件上的表格:
創建表,列和行
前面我們已經討論過,像DataTable
,DataColumn
和DataRow
這樣的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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:
單擊「從數據庫表中加載數據」按鈕將顯示數據網格視圖控件上的表格: