應用程式與資料庫進行通訊,首先檢索儲存在資料庫中的資料,並以便於使用者使用的方式顯示;其次,通過插入,修改和刪除資料來更新資料庫中的資料。
Microsoft ActiveX Data Objects.Net(ADO.Net)是一個模型,是.NET應用程式用於檢索,存取和更新資料的.Net框架的一部分。
ADO.Net物件模型不過是通過各種元件的結構化流程流程。物件模型可以描述如下圖所示:
在資料儲存或資料庫中的資料通過資料提供者(DataProvider)檢索。資料提供者的各種元件檢索應用程式的資料並更新資料。
應用程式通過資料集或資料讀取器存取資料。
資料提供者用於連線到資料庫,執行命令和檢索資料,將其儲存在資料集中,讀取檢索到的資料並更新資料庫。
ADO.Net
中的資料提供者由以下四個物件組成:
編號 | 物件 | 描述 |
---|---|---|
1 | Connection |
該元件用於與資料源建立連線。 |
2 | Command |
命令是用於檢索,插入,刪除或修改資料源中的資料的SQL語句或儲存過程。 |
3 | DataReader |
資料讀取器用於以唯讀和只進模式從資料源檢索資料。 |
4 | DataAdapter |
這對ADO.Net的工作是不可或缺的,因為資料通過資料介面卡傳輸到資料庫和從資料庫傳輸。它從資料庫檢索資料到資料集並更新資料庫。對資料集進行更改時,資料庫中的更改實際上是由資料介面卡完成的。 |
ADO.Net中包含以下不同型別的資料提供程式 -
資料集(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框架提供了兩種型別的連線類:
在名為testDB的資料庫中有一個名為Customers
的儲存在Microsoft SQL Server中的表。請參閱SQL Server教學在SQL Server中建立資料庫和資料庫表。
下面演示如何連線到這個資料庫(假設已經建立好了一個名稱為:testdb 的資料庫),參考以下步驟:
DataGridView
。在上圖中,點選新增專案資料源連結。
這將開啟資料源組態嚮導。選擇資料庫 作為資料源型別。然後下一步 -
customers
表,然後單擊完成 按鈕。如下圖所示 - 當使用Microsoft Visual Studio工具列上的「開始」按鈕執行應用程式時,它將顯示以下視窗:
在這個例子中,將演示如何使用程式碼存取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工具列上的「開始」按鈕執行時,它將顯示以下視窗:
單擊從資料庫表載入資料按鈕將顯示資料網格檢視控制元件上的表格:
建立表,列和行
前面我們已經討論過,像DataTable
,DataColumn
和DataRow
這樣的DataSet
元件可用於分別建立表,列和行。
以下範例3中演示了這個概念。
到目前為止,我們已經使用了計算機中已有的資料庫和表。 在這個例子中,將建立一個表,向其中新增列,行和資料,並使用DataGridView
物件顯示該錶結構和資料記錄。建立一個名稱為:DatabaseAccess3 的專案。
參考以下步驟:
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工具列上的「開始」按鈕執行時,它將顯示以下視窗:
單擊「從資料庫表中載入資料」按鈕將顯示資料網格檢視控制元件上的表格: