使用ADO.NET解鎖 Microsoft Access資料(二)

來源:互聯網
上載者:User
access|ado|資料 資料表單嚮導

Visual Studio .NET 資料表單嚮導允許您快速串連到資料庫,並產生簡單的使用者介面,用於顯示資料並與資料進行互動。要使用資料表單嚮導,請執行以下步驟:
在 Windows 應用程式項目中,在 Project(項目)菜單上,單擊 Add Windows Form(添加 Windows 表單)。
在 Templates(模板)窗格中,單擊 Data Form Wizard(資料表單嚮導),單擊 Open(開啟),然後單擊 Next(下一步)。
在 Create a new dataset named(建立新資料集)框中,鍵入 DataSet1,然後單擊 Next(下一步)。
選擇現有的資料連線或建立新資料連線,然後單擊 Next(下一步)。
選擇要向 DataSet1 填充的項,然後單擊 Next(下一步)。
如果選擇多項,請定義各項之間的關係,然後單擊 Next(下一步)。
定義要在表單中顯示的表和列,然後單擊 Next(下一步)。
選擇顯示樣式選項,然後單擊 Finish(完成)。
注意:請確保將新資料表單設定為啟動表單,方法如下:在 Project(項目)菜單中,單擊 Properties(屬性)。展開 Common Properties(通用屬性)檔案夾,單擊 General(常規),在 Startup object(啟始物件)列表中選擇該資料表單,然後單擊 OK(確定)。
注意:請確保將 DataSet1 中的資料繫結到資料表單,這可以通過向資料表單的 Load 事件插入以下代碼來實現:Me.OleDbDataAdapter1.Fill(objDataSet1)
運行應用程式:在 Debug(調試)菜單上,單擊 Run(運行)。
擴充的 ADO.NET 程式碼範例

為了向您示範更多的 ADO.NET 代碼,在本月專欄的最後,我將介紹幾個在 ADO.NET 中建立的擴充的程式碼範例。
使用 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 Files\Microsoft" & _
            "Office\Office10\Samples\Northwind.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 Files\Microsoft" & _
            "Office\Office10\Samples\Northwind.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 屬性,如代碼中所示),將返回單個資料欄位值。 

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。