使用 ADO.NET 解锁 Microsoft Access 数据(2)

access|ado|数据

使用 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 属性,如代码中所示),将返回单个数据字段值。
更多信息
有关 ADO.NET 的更多信息,请参阅以下内容:

ADO.NET(英文,链接列表)
ADO.NET for the ADO Programmer(英文,技术文章)
Accessing Data with ADO.NET(英文,链接列表)
Views and Filters(英文,技术文章)
Data Relations and Relatives(英文,技术文章)
--转自微软中国

时间: 2024-09-15 15:50:08

使用 ADO.NET 解锁 Microsoft Access 数据(2)的相关文章

使用 ADO.NET 解锁 Microsoft Access 数据(1)

access|ado|数据 使用 ADO.NET 解锁 Microsoft Access 数据 Paul CornellMicrosoft Corporation 2001 年 12 月 6 日 Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access

使用ADO.NET解锁 Microsoft Access数据(一)

access|ado|数据 使用ADO.NET解锁 Microsoft Access数据 作者:微软中国   Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access 数据项目.Office 数据连接.Office 数据链接等等.而 Microsoft

使用ADO.NET解锁 Microsoft Access数据(二)

access|ado|数据 数据表单向导 Visual Studio .NET 数据表单向导允许您快速连接到数据库,并生成简单的用户界面,用于显示数据并与数据进行交互.要使用数据表单向导,请执行以下步骤: 在 Windows 应用程序项目中,在 Project(项目)菜单上,单击 Add Windows Form(添加 Windows 窗体). 在 Templates(模板)窗格中,单击 Data Form Wizard(数据窗体向导),单击 Open(打开),然后单击 Next(下一步). 在

怎样经由ADO来压缩Microsoft Access数据库

HOWTO: Compacting Microsoft Access Database via ADO --------------------------------------------------------------------------------The information in this article applies to: ActiveX Data Objects (ADO), versions 2.1, 2.5, 2.6 Microsoft OLE DB Provid

将Access数据转换为XML格式

access|xml|数据|转换 问:我怎样才能将Microsoft Access数据表中的数据转换为XML格式? 答:以下应用程序可以帮助您将Access数据转换为XML格式:Access 2002. ADO 2.5和SQLXML.您可以通过Access 2002(Microsoft Office XP的一部分)查询数据或者使用XML格式保存数据.您可能想自动完成这个转换过程.ADO 2.5及其后续版本使您可以将数据打开到一个记录集中,然后以XML格式持有记录集,如以下代码所示: rs.Sav

使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?

问题描述 使用vb.net,用ADO.NET,如何向Access数据表中删除一条记录?谢谢 解决方案 解决方案二:deletefrom[表名]where[主关键字]=你要删的主关键字.解决方案三:deletefrom表where主键解决方案四:DimconAsNewSystem.Data.OleDb.OleDbConnectioncon.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;datasource=数据库文件;userid=;pass

如何使用ADO來压缩或修复Microsoft Access文件

 以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來压缩 Microsoft Access 文件,RepairDatabase Method 來修复损坏的 Microsoft Access 文件,.可是自从 ADO 出來之后,好像忘了提供相对的压缩及修复 Microsoft Access 文件的功能. 現在 Microsoft 发现了这个问题了,也提供了解決方法,不过有版本上的限制!限制說明如下: ActiveX Data Objects (ADO

如何在Microsoft Access 2007中处理DB2数据

在本系列文章的第一部分中,我向您展示了如何把Access 2007配置成相对于后端DB2服务器的图形前端处理机,详细解释了如何连接多个表格并基于表格创建一个提取层,这样信息技术人员就可以直接利用这些商业实体来工作而不用担心不同的命名约定了;从始至终,数据都存储在DB2服务器上,并且基本对于工作效率没有丝毫的影响.在这篇文章中,我想要深入的探讨一下针对那些存储在链接表格中的数据,您能够做些什么,以及向前端的Access 2007添加更多的表格来演示怎样把DB2变成一个整合层,最后论证一下当向信息技

大数据与Microsoft Access共同应用的机会

如今,大数据可能会以一些有趣的方式改变一些旧工具.Microsoft Office Access就是一个很好的例子.Microsoft Office Access是由微软发布的关系数据库管理系统.它结合了Microsoft Jet Database Engine和图形用户界面两项特点.Microsoft Office Access不再是简单的创建桌面数据库软件,它是一款能够帮助用户针对数据快速构建定制应用的工具,使其更轻松地对数据进行跟踪.报告以及与他人共享. 微软公司在25年前首次发布了这个应