频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2006-09-12 进入讨论组

讨论组http://group.qqread.com


  使用ADO.NET解锁 Microsoft Access数据

作者:微软中国  

Microsoft® office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO)、ActiveX® 数据对象 (ADO)、Microsoft word 邮件合并、Microsoft Excel Web 查询、Microsoft Query、数据访问页、Microsoft Access 数据项目、office 数据连接、office 数据链接等等。而 Microsoft .NET 平台则提供了其他的数据访问功能和工具,例如,ADO.NET、.NET 数据连接和数据库项目。
在本月的专栏中,我将介绍如何使用 Microsoft Visual Studio® .NET、Microsoft Visual Basic® .NET,特别是如何使用 ADO.NET 来解锁和管理 Microsoft Access 数据。
确定何时最适合使用 ADO.NET

既然 office 已经提供了一系列数据访问功能和工具,为什么不利用 office 来管理它自己的数据呢?当然,在许多情况下,您可能希望使用适合某个特定数据任务的内置 office 功能和工具。然而,ADO.NET 提供了一种添加数据连接和编写数据解决方案代码的统一方法,这种方法不同于 office 中的多个数据入口点和数据访问库。
如果您愿意,仍然可以在 Visual Studio .NET 和 Visual Basic .NET 中调用 ADO 功能。但鉴于以下原因,与 ADO 相比,ADO.NET 在许多方面都是更好的数据访问解决方案。
ADO.NET 允许在数据集中包含多个表,包括这些表之间的关系。ADO 只允许包含一个结果表(虽然此单个结果表可能是多个相关表上所执行的 JOIN 操作的结果)。
ADO.NET 提供断开连接的数据访问。ADO 也可以提供断开连接的数据访问,但 ADO 主要是为连接的数据访问而设计的。
ADO.NET 提供了一个记录导航范例,允许进行无序的数据访问(与有序的 ADO Move 方法不同),并可以利用数据表之间的关系访问各个数据表。
因为 ADO.NET 使用 XML 传送数据,所以能够提供比 ADO 更丰富的数据类型,获得更好的数据访问性能,还可以使数据穿过防火墙传递。
ADO.NET 经过了高度优化,以配合 Microsoft SQL Server 7.0 和 Microsoft SQL Server 2000 数据库的使用(反映在 ADO.NET Sql 对象中),同时提供对其他 OLE DB 数据源(如 Microsoft Access 数据库)的编程访问(反映在 ADO.NET OleDb 对象中)。

当然,如果希望利用 .NET 中的诸多新功能,就应该使用 .NET 数据访问功能和工具。有关 .NET 平台的详细信息,请参阅以前的专栏 Introducing .NET to office Developers(英文)。
ADO.NET 入门

图 1 显示了使用 ADO.NET 时要用到的主要对象。  
图 1:ADO.NET 对象模型中的主要对象(来源:Inside .NET Managed Providers [英文])
这些对象包括:
OleDbConnection 和 SqlConnection 对象,代表数据库连接,类似于 ADO 的 Connection 对象。
OleDbCommand 和 SqlDbCommand 对象,代表将要直接发送到数据库的 SQL 文本字符串,类似于 ADO 的 Command 对象。
OleDbDataAdapter 和 SqlDataAdapter 对象,用于保存数据库的 SELECT、INSERT、UPDATE 和 DELETE 命令。这些对象可以作为数据库和 DataSet 对象之间的中介。可以使用 Fill 方法填充 DataSet 对象并从数据库断开连接,然后使用 Update 方法重新连接到数据库,并将在 DataSet 对象中所做的更改保存回数据库。
DataSet 对象包含实际数据的副本,类似于断开连接的 ADO Recordset 对象。DataSet 对象可以包含 DataRelation 对象和 Contraint 对象,这两个对象分别代表数据表之间的关系和这些表中数据的约束。DataSet 对象还可以包含 DataTable 对象,该对象又可以包含 DataColumn 和 DataRow 对象。使用 DataTableMapping 对象和 DataColumnMapping 对象,数据集可以将数据库中的表和列映射为相应的 DataTable 对象和 DataColumn 对象。
SqlDataReader 对象和 OleDbReader 对象代表连接的、仅向前移动的、只读数据读取器。如果能够保持与数据库的持续连接,并且只希望读取数据而不进行更改,这是非常有用的。在这种情况下,无需创建 DataSet 对象。数据读取器类似于连接的、仅向前移动的、只读 ADO Recordset 对象。

作为参考,在使用 ADO 的 office Visual Basic for Applications (VBA) 中,可以通过以下方法打开罗斯文示例 Access 数据库,将数据从 Products 表复制到 Recordset 对象,并报告记录集中第一条数据记录的某些数据:
' office VBA 和 ADO 代码 - ADOCode.bas。
Public Sub ADOExample()

    ' 首先设置对 ADO 库的引用。
    Dim objConn As ADODB.Connection
    Dim objRS As ADODB.Recordset
    
    Set objConn = New ADODB.Connection
    
    objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "User ID=Admin;" & _
        "Data Source=C:\Program Files\Microsoft " & _
        "office\office10\Samples\Northwind.mdb"
    objConn.Open
    
    Set objRS = objConn.Execute("SELECT * FROM Products")
    
    objRS.MoveFirst
    
    MsgBox Prompt:=objRS.Fields("ProductName").Value & ", " & _
        objRS.Fields("UnitsInStock").Value
        
    objRS.Close
    objConn.Close

End Sub


如果您以前在 ADO 中进行过编码,则此 ADO 代码是非常简单的:
声明 ADO 的 Connection 对象和 Recordset 对象,它们分别引用数据库的连接和数据库的基础数据。
Connection 对象的 ConnectionString 属性设置为数据库特定的 String 值,该值代表连接到数据库(本例中为罗斯文数据库)所需要的信息。
Connection 对象的 Open 方法建立了实际的数据库连接。
Connection 对象的 Execute 方法从数据库检索数据,并将检索到的数据放入 Recordset 对象。
Recordset 对象的 MoveFirst 方法移至记录集中的第一条记录。
Recordset 对象的 Fields 属性引用记录中的特定列,而 Field 对象的 Value 属性将检索字段中的实际数据。

作为比较,下面是一些用于控制台应用程序的 Visual Basic .NET 示例代码,使用 ADO.NET 执行大体相同的操作,但它并不将数据放入记录集,而是由一个 ADO.NET 数据读取器保持与数据的连接:
' Visual Basic .NET 和 ADO.NET 代码 - ADONETCode.vb。
' 使用连接的 ADO.NET 数据访问。
' 控制台应用程序。
Imports System.Data.OleDb

Module Module1

    Sub Main()

        ' 首先设置对 System.Data.dll 的引用。
        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 objDataReader As OleDbDataReader = objCmd.ExecuteReader

        objDataReader.Read()
        Console.Write(objDataReader.Item("ProductName") & ", " & _
            objDataReader.Item("UnitsInStock"))

    End Sub

End Module


下面是该代码的工作方式:
代码 Imports System.Data.OleDb 有助于减少访问对象或对象的成员时所需的工作量。例如,尽管可以在 ADO 中编写 ADODB.Recordset 代码,但通常并不这样做,因为已经引用了 ADODB 库。同样,尽管可以在 ADO.NET 中编写 System.Data.OleDb.OleDbConnection 代码,但 更多文章 更多内容请看AccessADO.NET实用技巧.NET移动与嵌入式技术专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章