直播中
' Visual Basic .NET 代碼。
' 控制臺應用程序。
' 引用:
' System
' System.Data
' System.XML
Imports System.Data.OleDb ' 用于 OleDb 對象。
Imports Microsoft.VisualBasic.ControlChars ' 用于 CrLf 常量。
Module Module1
Sub Main()
' 創(chuàng)建并初始化 OleDbConnection、OleDbCommand
' 和 OleDbDataReader 對象。
Dim objConn As New _
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:\Program Files\Microsoft" & _
"Office\Office10\Samples\Northwind.mdb")
objConn.Open()
' 執(zhí)行命令并將數(shù)據(jù)讀取器附加到
' 所選數(shù)據(jù)。
Dim objCmd As New OleDbCommand("SELECT * FROM Products", _
objConn)
Dim objReader As OleDbDataReader = objCmd.ExecuteReader
' 讀取數(shù)據(jù)并列出值。
Call ReadData(objReader)
End Sub
Public Sub ReadData(ByVal objReader As OleDbDataReader)
' 目的:列出給定數(shù)據(jù)讀取器的數(shù)據(jù)值。
' 接受:objReader - 數(shù)據(jù)讀取器。
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
' 暫停,以便用戶在控制臺窗口中查看數(shù)據(jù)。
Console.Write("按任意鍵繼續(xù)...")
Console.Read()
End Sub
End Module
下面是該代碼的工作方式:
正如前面的代碼示例所示,Imports 代碼(例如,Imports System.Data.OleDb)有助于減少訪問對象或對象的成員時所需的工作量。類似地,對 OleDbConnection、OleDbCommand 和 OleDbDataReader 對象進行聲明和初始化,以分別代表數(shù)據(jù)庫連接、數(shù)據(jù)記錄和記錄游標。此代碼的真正核心是 ReadData 子例程。
Do 循環(huán)使用 OleDbDataReader 對象的 Read 方法一次讀取一行數(shù)據(jù),直到該方法返回 False(表示已沒有其他數(shù)據(jù)可讀?。?。
OleDbDataReader 對象的 FieldCount 屬性返回數(shù)據(jù)行中數(shù)據(jù)字段(列)的數(shù)目。如果是第一行數(shù)據(jù),則在列上調(diào)用 OleDbDataReader 對象的 GetName 屬性,以返回列的名稱。
OleDbDataReader 對象的 Item 屬性與 FieldCount 屬性結合,使用一個索引編號返回數(shù)據(jù)行中每個數(shù)據(jù)字段的值。
使用 DataAdapter、DataSet、DataTable、DataRow 和 DataColumn 對象處理數(shù)據(jù)集
ADO.NET 的 DataSet 對象是為斷開連接的數(shù)據(jù)而設計的。您可以在一個數(shù)據(jù)集中模擬整個數(shù)據(jù)庫的結構和數(shù)據(jù),包括表、行、列、字段,甚至關系。處理完數(shù)據(jù)后,可以使數(shù)據(jù)集中的數(shù)據(jù)與原始數(shù)據(jù)庫中的數(shù)據(jù)同步。下面是我編寫的一段示例代碼,可以逐個讀取斷開連接的數(shù)據(jù)集中的所有數(shù)據(jù)。
' Visual Basic .NET 代碼。
' 控制臺應用程序。
' 引用:
' System
' System.Data
' System.XML
Imports System.Data.OleDb ' 用于 OleDb 對象。
Imports Microsoft.VisualBasic.ControlChars ' 用于 CrLf 常量。
Module Module1
Sub Main()
' 創(chuàng)建并初始化 OleDbDataAdapter 和 DataSet 對象。
Dim objAdapter As New OleDbDataAdapter _
("SELECT * FROM Products", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;" & _
"Data Source=C:\Program Files\Microsoft" & _
"Office\Office10\Samples\Northwind.mdb")
Dim objDataSet As New DataSet()
' 將所選數(shù)據(jù)復制到數(shù)據(jù)集。
objAdapter.Fill(objDataSet)
' 列出數(shù)據(jù)集中的數(shù)據(jù)值。
Call ListData(objDataSet)
End Sub
Public Sub ListData(ByVal objDataSet As DataSet)
' 目的:列出給定數(shù)據(jù)集的數(shù)據(jù)值。
' 接受:objDataSet - 數(shù)據(jù)集。
Dim objTable As DataTable
Dim intRow, intColumn As Integer
' 數(shù)據(jù)集中可能包含有多個表。
For Each objTable In objDataSet.Tables
With objTable
Console.Write("表" & _
.TableName "中的數(shù)據(jù)" & ":" & 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
' 按行列出數(shù)據(jù)...
For intRow = 0 To .Rows.Count - 1
' ...然后按字段列出每行中的數(shù)據(jù)。
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
' 暫停,以便用戶在控制臺窗口中查看數(shù)據(jù)。
Console.Write("按任意鍵繼續(xù)...")
Console.Read()
End Sub
End Module
下面是該代碼的工作方式:
同樣,Imports 代碼(例如,Imports System.Data.OleDb)有助于減少訪問對象或對象的成員時所需的工作量。類似地,對 OleDbDataAdapter 和 DataSet 對象進行聲明和初始化,分別代表數(shù)據(jù)庫與數(shù)據(jù)集之間的適配器以及數(shù)據(jù)集。OleDbAdapter 對象的 FillData 方法將數(shù)據(jù)庫中的數(shù)據(jù)復制到數(shù)據(jù)集。此代碼的核心是 ListData 子例程。
通過使用 DataSet 對象的 Tables 屬性,最外層的 For...Each 循環(huán)將遍歷數(shù)據(jù)集中的每個表,并將每個表作為 DataTable 對象返回。
DataTable 對象的 Columns 屬性返回一個 DataColumnCollection,代表表中的所有列。通過結合使用 Columns 屬性和一個索引編號(即結合 DataColumnCollection 集合的 Count 屬性,如代碼中所示),將返回一個 DataColumn 對象。DataColumn 對象的 ColumnName 屬性返回列的名稱。
同樣,DataTable 對象的 Rows 屬性返回一個 DataRowCollection,代表表中的所有行。通過結合使用 Rows 屬性和一個索引編號(即結合 DataRowCollection 集合的 Count 屬性,如代碼中所示),將返回一個 DataRow 對象。DataRow 對象的 ItemArray 屬性返回一個 Object 類型的數(shù)組,代表數(shù)據(jù)行中的每個值。通過結合使用 ItemArray 屬性和一個索引編號(即結合 DataColumnCollection 集合的 Count 屬性,如代碼中所示),將返回單個數(shù)據(jù)字段值。
更多信息
有關 ADO.NET 的更多信息,請參閱以下內(nèi)容:
ADO.NET(英文,鏈接列表)
ADO.NET for the ADO Programmer(英文,技術文章)
Accessing Data with ADO.NET(英文,鏈接列表)
Views and Filters(英文,技術文章)
Data Relations and Relatives(英文,技術文章)
--轉自微軟中國