设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5445|回复: 8
打印 上一主题 下一主题

[ADO/DAO] [转帖]使用ADO.NET解锁Microsoft Access数据

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-1-12 17:45:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 = "rovider=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("roductName").Value & ", " & _
objRS

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
 楼主| 发表于 2004-1-12 17:46:00 | 只看该作者

[转帖]使用ADO.NET解锁Microsoft Access数据

数据表单向导
Visual Studio .NET 数据表单向导允许您快速连接到数据库,并生成简单的用户界面,用于显示数据并与数据进行交互。要使用数据表单向导,请执行以下步骤:  
1. 在 Windows 应用程序项目中,在 Project(项目)菜单上,单击 Add Windows Form(添加 Windows 窗体)。  
2. 在 Templates(模板)窗格中,单击 Data Form Wizard(数据窗体向导),单击 Open(打开),然后单击 Next(下一步)。  
3. 在 Create a new dataset named(创建新数据集)框中,键入 DataSet1,然后单击 Next(下一步)。  
4. 选择现有的数据连接或创建新数据连接,然后单击 Next(下一步)。  
5. 选择要向 DataSet1 填充的项,然后单击 Next(下一步)。  
6. 如果选择多项,请定义各项之间的关系,然后单击 Next(下一步)。  
7. 定义要在表单中显示的表和列,然后单击 Next(下一步)。  
8. 选择显示样式选项,然后单击 Finish(完成)。  
注意:请确保将新数据表单设置为启动表单,方法如下:在 Project(项目)菜单中,单击 Properties(属性)。展开 Common Properties(通用属性)文件夹,单击 General(常规),在 Startup object(启动对象)列表中选择该数据表单,然后单击 OK(确定)。
注意:请确保将 DataSet1 中的数据绑定到数据表单,这可以通过向数据表单的 Load 事件插入以下代码来实现:Me.OleDbDataAdapter1.Fill(objDataSet1)
9. 运行应用程序:在 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("rovider=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 属性,以
3#
发表于 2004-6-23 00:35:00 | 只看该作者
太棒了
4#
发表于 2004-6-23 17:32:00 | 只看该作者
虽看不太懂,也支持一下
5#
发表于 2004-7-7 20:06:00 | 只看该作者
good.
6#
发表于 2004-9-27 01:55:00 | 只看该作者
好贴
7#
发表于 2004-10-4 23:10:00 | 只看该作者
[em04]我想问一下   我的电脑经常被别人动用   ,我想在设置一个密码 ,使别人不经我的同意在电脑启动后无法使用。   那位告诉我最简单的办法,我是个新手   ,多多指教,谢谢啦!!
8#
发表于 2004-11-11 06:10:00 | 只看该作者
非常好,如果能将代码实例程序放上来,一定可以更快帮助理解
9#
发表于 2004-11-14 04:49:00 | 只看该作者
关于蚊子的话  你只要 设置开机密码就可以了开机时按DEL 键进入CMOS 画面 在用户那个画面设置密码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-30 09:57 , Processed in 0.108822 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表