热门文章
 
ADO 编程模型的关键元素
ADO 对象模型目录
ADO connection
ADO connection
ADO connection
Mode 属性(Connec
AOD connection
ADO connection
Execute 方法 (AD
管理事务:BeginTran
 推荐文章
 
AOD connection
Recordset 对象
ADO事件处理程序如何协同工
ADO connection
ADO 教程:microso
ADO:Field 对象
ADO 编程模型的关键元素
ADO connection
ODBC体系结构分析
Mode 属性(Connec
通过 ADO 使用提供者
ADO connection
Command 对象的集合、
管理事务:BeginTran
返回 ADO 的版本号
OpenSchema 方法
 
你现在的位置:您现在的位置是: 中国ASP>>数据库>>ADO教程
ADO 教程:microsoft提供的描述性教程

步骤 1:打开连接:连接到数据源。

您需要一种途径来建立交换数据所需的条件,即“连接”。所连接的数据源在“连接字符串”中指定。对于不同的提供者和数据源,连接字符串中所指定的参数也会有所不同。

ADO 打开连接的主要途径是使用 Connection.Open 方法。或者,也可以在同一个操作中调用 Recordset.Open 快捷方法,既打开连接又通过该连接发出命令。下面是每种方法的 Visual Basic 语法:

connection.Open ConnectionString, UserID, Password, OpenOptions
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

比较这两种方法将加深对 ADO 方法参数的总体了解。

可以通过几种方式指定方法参数。例如,Recordset.Open 接受 ActiveConnection 参数,该参数可以是文字字符串、表示该字符串的变量或者是表示打开的连接的 Connection 对象。

本教程使用文字连接字符串“DSN=Pubs;uid=sa;pwd=;”。(通过“DSN=”关键字间接指定数据源。有关详细信息,请参阅 Microsoft OLE DB Provider for ODBC 中的“典型连接字符串”一节。)

如果省略方法参数,许多对象都将具有可提供参数的属性。例如,通过设置 Connection 对象的 ConnectionString 属性,可以为 Connection.Open 方法提供连接字符串信息,然后省略 Open 方法的 ConnectionString 参数。

本教程使用下列 Connection 对象声明和 Open 方法:

Dim cnn As New ADODB.Connection
cnn.Open "DSN=Pubs;uid=sa;pwd=;"

创建命令:创建表示 SQL 查询命令的对象

“命令”是数据提供者可以理解的指令,数据提供者可以对数据源进行修改、管理或操作。尽管不需要特定的命令语言,但通常用 SQL 编写命令。“查询”命令请求数据提供者返回包含信息行的 Recordset 对象。

指定命令为下列形式之一:

“命令文本”(即文字字符串)或者表示字符串的变量。


表示命令的对象。在这种情况下,命令是设置为命令文本的 Command 对象 CommandText 属性的值。
有关参数化命令的简要介绍,请参阅其他选项。

本教程查询 Pubs 数据库的 Authors 表中的所有信息。声明的 Command 对象通过打开的 Connection 对象和命令文本来设置。代码如下:

Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * from Authors"

执行命令:如果命令以行返回,将行存储在存储对象中

返回 Recordset 的方法有三种:Connection.Execute、Command.Execute 和 Recordset.Open。下面是它们的 Visual Basic 语法:

connection.Execute(CommandText, RecordsAffected, Options)
command.Execute(RecordsAffected, Parameters, Options)
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

优化这些方法以发挥其特定对象的优势。

在发出命令之前,必须隐式或显式打开一个连接。发出命令的每种方法均以不同的方式表示该连接:

Connection.Execute 方法使用 Connection 对象自身体现的连接。


Command.Execute 方法使用在其 ActiveConnection 属性中设置的 Connection 对象。


Recordset.Open 方法使用连接字符串、其 ActiveConnection 参数或者使用在其 ActiveConnection 属性中设置的 Connection 对象。
另一个区别是在三种方法中指定命令的方式各不相同:

在 Connection.Execute 方法中,命令是命令文本。


在 Command.Execute 方法中,命令是不可见的,它在 Command.CommandText 属性中指定。另外,命令还可以被参数化。


在 Recordset.Open 方法中,命令是 Source 参数,它可以是命令文本或 Command 对象。(Source 参数还可以是一个字符串,该字符串指定表名、存储过程或持久 Recordset 的文件名。)
每种方法可根据性能需要替换使用功能:

Execute 方法是针对(但不局限于)执行不返回数据的命令。


两种 Execute 方法都可返回只读、仅向前 Recordset 对象。


Command.Execute 方法允许使用可有效重复利用的参数化命令。


Open 方法允许指定 CursorType(用于访问数据的策略及对象)和 LockType(指定其他用户的“隔离”级别以及游标是否支持“立即”或“批”模式的更新。后面将作详细讨论)。
请深入了解这些选项,它们体现了 Recordset 的很多功能。尤其重要的是决定使用 Microsoft Cursor Service for OLE DB。有关此决定的含义的详细信息,请参阅 Microsoft Cursor Service for OLE DB。

本教程将在批模式下对 Recordset 进行更改。因此,将 LockType 设置为 adLockBatchOptimistic。因为批处理需要 Cursor Service,所以将 CursorLocation 属性设置为 adUseClient。由于 Command 对象已经被设置为打开的连接,因此不能在 Open 方法中指定 ActiveConnection 参数。

Recordset 的声明和使用如下:

Dim rs As New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open cmd, , adOpenStatic, adLockBatchOptimistic

操作数据:定位、检查、操作和编辑数据

大量 Recordset 对象方法和属性均可用于检查、定位和操作 Recordset 数据。

可以将 Recordset 看作行数组。可在任何时候进行检查和操作的行称为“当前行”,该行在 Recordset 中的位置称为“当前行位置”。每次移动到另一行时,该行就成为新的当前行。

在 Recordset 中有多种显式移动或“定位”的方法(Move 方法)。某些方法(Find 方法)在其操作的附加效果中也能做到这一点。此外,设置某些属性(Bookmark 属性)还可更改行的位置。Recordset 对象的 CursorType 属性或者 Open 方法的 CursorType 参数决定了是否可以在 Recordset 中向前和向后定位。

Filter 属性控制可以访问的行(即这些行是“可见的”)。Sort 属性控制定位 Recordset 行的顺序。

可以用 AddNew 方法创建新行或者用 Delete 方法删除现有的行。

Recordset 有一个 Fields 集合,它是表示一行中的字段(或列)的 Field 对象的集合。可以通过 Field 对象的 Value 属性为字段赋值或检索其数据。通过 GetRows 方法还可以访问大量的字段数据。修改完 Recordset 后,用 Update 方法将更改传播到数据源。

在本教程中,您将要:

设置 au_lname Field 对象 Properties 集合的 Optimize 属性,以提高存储和过滤性能。


按每位作者的姓对 Recordset 进行排序。


过滤 Recordset,这样可以仅使区号为“415”、局号以“5”开头的作者电话号码所在的行成为可访问的行。


将过滤出的电话号码更改为虚构的区号“777”。
使用 Move 方法从头到尾对经过排序和过滤的 Recordset 进行定位。当 Recordset 对象 EOF 属性指示已到达最后一行时,停止操作。在 Recordset 中移动时,显示作者的姓名和原电话号码,然后将 phone 字段中的区号改为“777”。(phone 字段中的电话号码格式为“aaa xxx-yyyy”,其中 aaa 为区号,xxx 为局号。)

当一行被更改时,它不再与过滤器指定的条件相匹配,因此在 Recordset 中将不可见。清除过滤后,所有的行将重新出现。

有关 Authors 表的布局,请参阅模式。代码如下:

rst!au_lname.Properties("Optimize") = True
rst.Sort = "au_lname"
rst.Filter = "phone LIKE '415 5*'"
rst.MoveFirst
Do While Not rst.EOF
Debug.Print "Name = "; rst!au_fname; " "; rst!au_lname; _
", Phone = "; rst!phone
rst!phone = "777" & Mid(rst!phone, 4)
rst.MoveNext
Loop
rst.Filter = adFilterNone

更新数据 在适当情况下,可以使用存储对象中的更改来更新数据源。可选,在事务中嵌入更新。

刚更改完 Recordset 多个行中的数据。ADO 支持两个基本概念,这两个概念与数据行的添加、删除和修改有关。

第一个概念是不立即更改 Recordset,而是将更改写入内部“复制缓冲区”。如果您不想进行更改,复制缓冲区中的更改将被放弃。如果想保留更改,复制缓冲区中的更改将被应用到 Recordset。

第二个概念是只要声明行的工作完成便立即将更改传播到数据源(即“立即”模式),或者在声明行集合的工作完成之前收集对行集合的所有更改(即“批”模式)。LockType 属性确定何时对基本数据源进行更改。CursorLocation 属性会影响可用的 LockType 设置。例如,如果将 CursorLocation 属性设置为 adUseClient,则不支持 adLockPessimistic 设置。

在立即模式中,每次调用 Update 方法都会将更改传播到数据源。在批模式中,每次调用 Update 或移动当前行的位置时,都会将更改保存到复制缓冲区,但只有 UpdateBatch 方法将更改传播到数据源。Recordset 以批模式打开 (adLockBatchOptimistic),因此更新也以批模式进行。

另外,更新可以在“事务”中进行。事务建立了一个环境,在这个环境中,事务中的操作或者全部成功,或者全部无效。

事务的一个常见范例是银行业应用程序。其中,一个操作是从一个账号中扣除某个数额,另一个操作是把相同数额存入另一个帐号,两个操作都必须成功。如果一个操作失败,必须取消另一个操作,否则将导致账号收支不平衡。

通常,事务可在相当长的时间内分配和保持数据源上的有限资源。因此建议事务的存在时间越短越好。(这便是本教程不在进行连接之初就开始事务的原因。)

本教程实际上不需要事务,但还是包括了一个事务用于说明。开始事务并执行批更新的代码如下:

cnn.BeginTrans
rst.UpdateBatch

结束更新 如果使用事务,可以接受或拒绝在事务进行中所做的更改。结束事务。

假设批更新结束时报错。如何解决错误将取决于该错误的性质和严重性以及应用程序的逻辑关系。如果数据库是与其他用户共享的,典型的错误则是其他人在您之前更改了字段,这种类型的错误称为“冲突”。ADO 将检测这种情况并报告错误。

本教程中,此步骤分为两部分:如果没有更新错误,数据源将反映更新所做的更改。事务被“提交”。提交事务最终完成并结束事务。

接受更新的代码如下:

cnn.CommitTrans

如果存在更新错误,它们将被错误处理例程捕获。用 adFilterConflictingRecords 常量过滤 Recordset,从而只显示存在冲突的行。纠正错误的策略只需打印作者的姓名(au_fname 和 au_lname),然后“回卷”(即撤消)事务。回卷事务将放弃所有成功的更新并结束事务。

拒绝更新的代码如下:

rst.Filter = adFilterConflictingRecords
rst.MoveFirst
Do While Not rst.EOF
Debug.Print "Conflict: Name = "; rst!au_fname; " "; rst!au_lname
rst.MoveNext
Loop
cnn.RollbackTrans

更新结束后,Recordset 和 Connection 对象被关闭,范例退出。代码如下:

rst.Close
cnn.Close


相关信息:

ADO 编程模型的关键元素
ADO 对象模型目录
ADO connection 对象包含的内容
ADO connection 对象 :ConnectionString 属性
ADO connection:ConnectionTimeout 属性
Mode 属性(Connection、Record 或 Stream)
AOD connection属性:CursorLocation DefaultDatabase IsolationLevel Provider
ADO connection 对象 :open和close方法

 

中国ASP技术 ASP.ORG.CN 版权所有 2004-2008