程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 使用 ADO.NET 解鎖 Microsoft Access 數據(2)

使用 ADO.NET 解鎖 Microsoft Access 數據(2)

編輯:關於Access數據庫
 

使用 DataReader 對象以僅向前移動的、只讀的格式訪問數據
很多時候,您只是希望簡單地浏覽數據,而並不需要在數據間來回浏覽,也不需要更改數據(我們將此稱為“流水數據”)。ADO.Net 的 DataReader 對象是專門為此設計的。下面是我編寫的一段示例代碼,可以逐個讀取連接的數據庫中的所有選定數據:

‘ Visual Basic .Net 代碼。
‘ 控制台應用程序。
‘ 引用:
‘ System
‘ System.Data
‘ System.XML

Imports System.Data.OleDb ‘ 用於 OleDb 對象。
Imports Microsoft.VisualBasic.ControlChars ‘ 用於 CrLf 常量。

Module Module1

Sub Main()

‘ 創建並初始化 OleDbConnection、OleDbCommand
‘ 和 OleDbDataReader 對象。
Dim objConn As New _
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:Program FilesMicrosoft" & _
"OfficeOffice10SamplesNorthwind.mdb")

objConn.Open()

‘ 執行命令並將數據讀取器附加到
‘ 所選數據。
Dim objCmd As New OleDbCommand("SELECT * FROM Products", _
objConn)
Dim objReader As OleDbDataReader = objCmd.ExecuteReader

‘ 讀取數據並列出值。
Call ReadData(objReader)

End Sub

Public Sub ReadData(ByVal objReader As OleDbDataReader)

‘ 目的:列出給定數據讀取器的數據值。
‘ 接受:objReader - 數據讀取器。

Dim intFIEld As Integer ‘ 行中的當前字段。
Dim intColumn As Integer ‘ 當前列的名稱。
Dim blnColumns As Boolean = False ‘ 列名稱是否已
‘ 列出。

With objReader

‘ 一次讀取一行,直至文件末尾。
Do While .Read = True

For intField = 0 To .FIEldCount - 1

‘ 首先列出列名稱。
If blnColumns = False Then

For intColumn = 0 To .FIEldCount - 1

If intColumn = .FIEldCount - 1 Then
Console.Write(.GetName(intColumn) & _
CrLf)
Else
Console.Write(.GetName(intColumn) & _
", ")
End If

Next intColumn

‘ 只列出一次列名稱。
blnColumns = True

End If

‘ 列出當前行中每個字段的值。
If intField = .FIEldCount - 1 Then
Console.Write(.Item(intFIEld) & CrLf)
Else
Console.Write(.Item(intFIEld) & ", ")
End If

Next intFIEld

Loop

End With

‘ 暫停,以便用戶在控制台窗口中查看數據。
Console.Write("按任意鍵繼續...")
Console.Read()

End Sub

End Module

下面是該代碼的工作方式:

正如前面的代碼示例所示,Imports 代碼(例如,Imports System.Data.OleDb)有助於減少訪問對象或對象的成員時所需的工作量。類似地,對 OleDbConnection、OleDbCommand 和 OleDbDataReader 對象進行聲明和初始化,以分別代表數據庫連接、數據記錄和記錄游標。此代碼的真正核心是 ReadData 子例程。
Do 循環使用 OleDbDataReader 對象的 Read 方法一次讀取一行數據,直到該方法返回 False(表示已沒有其他數據可讀取)。
OleDbDataReader 對象的 FIEldCount 屬性返回數據行中數據字段(列)的數目。如果是第一行數據,則在列上調用 OleDbDataReader 對象的 GetName 屬性,以返回列的名稱。
OleDbDataReader 對象的 Item 屬性與 FIEldCount 屬性結合,使用一個索引編號返回數據行中每個數據字段的值。
使用 DataAdapter、DataSet、DataTable、DataRow 和 DataColumn 對象處理數據集
ADO.Net 的 DataSet 對象是為斷開連接的數據而設計的。您可以在一個數據集中模擬整個數據庫的結構和數據,包括表、行、列、字段,甚至關系。處理完數據後,可以使數據集中的數據與原始數據庫中的數據同步。下面是我編寫的一段示例代碼,可以逐個讀取斷開連接的數據集中的所有數據。

‘ Visual Basic .Net 代碼。
‘ 控制台應用程序。
‘ 引用:
‘ System
‘ System.Data
‘ System.XML

Imports System.Data.OleDb ‘ 用於 OleDb 對象。
Imports Microsoft.VisualBasic.ControlChars ‘ 用於 CrLf 常量。

Module Module1

Sub Main()

‘ 創建並初始化 OleDbDataAdapter 和 DataSet 對象。
Dim objAdapter As New OleDbDataAdapter _
("SELECT * FROM Products", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:Program FilesMicrosoft" & _
"OfficeOffice10SamplesNorthwind.mdb")
Dim objDataSet As New DataSet()

‘ 將所選數據復制到數據集。
objAdapter.Fill(objDataSet)

‘ 列出數據集中的數據值。
Call ListData(objDataSet)

End Sub

Public Sub ListData(ByVal objDataSet As DataSet)

‘ 目的:列出給定數據集的數據值。
‘ 接受:objDataSet - 數據集。

Dim objTable As DataTable
Dim intRow, intColumn As Integer

‘ 數據集中可能包含有多個表。
For Each objTable In objDataSet.Tables

With objTable

Console.Write("表" & _
.TableName "中的數據" & ":" & CrLf)

‘ 首先列出列名稱。
For intColumn = 0 To .Columns.Count - 1

If intColumn = .Columns.Count - 1 Then
Console.Write(.Columns(intColumn).ColumnName _
& CrLf)
Else
Console.Write(.Columns(intColumn).ColumnName _
& ", ")
End If

Next intColumn

‘ 按行列出數據...
For intRow = 0 To .Rows.Count - 1

‘ ...然後按字段列出每行中的數據。
For intColumn = 0 To _
.Rows(intRow).ItemArray.Length - 1

If intColumn = _
.Rows(intRow).ItemArray.Length - 1 Then
Console.Write(.Rows(intRow). _
ItemArray(intColumn) _
& CrLf)
Else
Console.Write(.Rows(intRow). _
ItemArray(intColumn) & ", ")
End If

Next intColumn

Next intRow

End With

Next objTable

‘ 暫停,以便用戶在控制台窗口中查看數據。
Console.Write("按任意鍵繼續...")
Console.Read()

End Sub

End Module

下面是該代碼的工作方式:

同樣,Imports 代碼(例如,Imports System.Data.OleDb)有助於減少訪問對象或對象的成員時所需的工作量。類似地,對 OleDbDataAdapter 和 DataSet 對象進行聲明和初始化,分別代表數據庫與數據集之間的適配器以及數據集。OleDbAdapter 對象的 FillData 方法將數據庫中的數據復制到數據集。此代碼的核心是 ListData 子例程。
通過使用 DataSet 對象的 Tables 屬性,最外層的 For...Each 循環將遍歷數據集中的每個表,並將每個表作為 DataTable 對象返回。
DataTable 對象的 Columns 屬性返回一個 DataColumnCollection,代表表中的所有列。通過結合使用 Columns 屬性和一個索引編號(即結合 DataColumnCollection 集合的 Count 屬性,如代碼中所示),將返回一個 DataColumn 對象。DataColumn 對象的 ColumnName 屬性返回列的名稱。
同樣,DataTable 對象的 Rows 屬性返回一個 DataRowCollection,代表表中的所有行。通過結合使用 Rows 屬性和一個索引編號(即結合 DataRowCollection 集合的 Count 屬性,如代碼中所示),將返回一個 DataRow 對象。DataRow 對象的 ItemArray 屬性返回一個 Object 類型的數組,代表數據行中的每個值。通過結合使用 ItemArray 屬性和一個索引編號(即結合 DataColumnCollection 集合的 Count 屬性,如代碼中所示),將返回單個數據字段值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved