come on babay

come on babay,Love me ,love yourself.

2007/04/23

 

ado 参考



--
摘要:在OLE DB(建立于低层ODBC 之上,是一个针对 SQL 数据源和非SQL 数据源,如邮件和目录等进行操作的应用程序接口)的基础上,Microsoft 推出了另一个数据访问对象模型:ADO(ActiveX Data Object:ActiveX数据对象)。ADO 采用基于 DAO 和 RDO 的对象,并提供比 DAO 和 RDO 更简单的对象模型,它包含一些简化对数据存储区数据的访问任务的内置对象。同时ADO具有强大的功能和灵活性,它可以使用相同的编程模式连接到不同的数据库,为我们提供了数据库访问接口。

ADO对象

ADO 模型中定义了六个常用的对象:Connection、Command、Recordset、Error、Field和Parameter对象,通过这些对象的属性和方法,我们可以很方便地建立数据库连接,执行SQL查询以及存取操作。

下图直观地描述了对象之间的关系:

ADO对象关系图


Connection对象

代表打开的、与数据源的连接。一般使用 Connection 对象的集合、方法、和属性执行下列操作:

1、在打开连接前使用 ConnectionString、ConnectionTimeout 和 Mode 属性对连接进行配置。
2、使用 DefaultDatabase 属性设置连接的默认数据库。
3、使用 Provider 属性指定 OLE DB 提供者。
4、使用 Open 方法建立到数据源的物理连接。使用 Close 方法将其断开。
5、使用 Execute 方法执行对连接的命令,并使用 CommandTimeout 属性对执行进行配置。
6、使用 BeginTrans、CommitTrans 和 RollbackTrans 方法以及 Attributes 属性管理打开的连接上的事务(如果提供者支持则包括嵌套的事务)。
7、使用 Errors 集合检查数据源返回的错误。

应用举例(ASP):
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "replace this for the_string_of_connect_to_database"

Command对象

定义了对数据源执行的命令,我们可以使用 Command 对象的集合、方法、属性进行下列操作:

1、使用 CommandText 属性定义命令(例如,SQL 语句)的可执行文本。
2、通过 Parameter 对象和 Parameters 集合定义参数化查询或存储过程参数。
3、使用 Execute 方法执行命令并在适当的时候返回 Recordset 对象。
4、执行前使用 CommandType 属性指定命令类型以优化性能。
5、使用 CommandTimeout 属性设置等待命令执行的秒数。
6、通过设置 ActiveConnection 属性关联打开的连接。
7、设置 Name 属性将 Command 标识为与 Connection 对象关联的方法。
8、将 Command 对象传送给 Recordset 的 Source 属性以便获取数据。
 
注意   如果不想使用 Command 对象执行查询,请将查询字符串传送给 Connection 对象的 Execute 方法或 Recordset 对象的 Open 方法。虽然这也可以达到同样的目的,但是,某些情况下,比如使用查询参数时,则必须使用 Command 对象。

如果将多个 Command 对象与同一个连接关联,必须显式创建并打开 Connection 对象,这样即可将 Connection 对象赋给对象变量。如果没有将 Command 对象的 ActiveConnection 属性设置为该对象变量,则即使使用相同的连接字符串,ADO 也将为每个 Command 对象创建新的 Connection 对象。

要执行 Command,只需通过它所关联的 Connection 对象的 Name 属性,将其简单调用即可。必须将 Command 的 ActiveConnection 属性设置为 Connection 对象。如果 Command 带有参数,则将这些参数的值作为参数传送给方法。

如果在相同连接上执行两个或多个 Command 对象,并且某个 Command 对象是带输出参数的存储过程,这时会发生错误。要执行各个 Command 对象,请使用独立的连接或将所有其他 Command 对象的连接断开。

应用举例:
dim cmd
set cmd= Server.CreateObject("ADODB.Command")
cmd.CommandText= "your_sqlcommand"
cmd. ActiveConnection = your_connection
… …

Recordset对象

执行命令返回的记录集。任何时候,Recordset 对象所指的当前记录均为集合内的单个记录。通过 Recordset 对象可对几乎所有数据进行操作。它由记录(行)和字段(列)构成。

要点1:在 ADO 中定义了四种不同的游标类型(CursorType):


仅向前游标(AdOpenForwardOnly:0) ― 除仅允许在记录中向前滚动之外,其行为类似静态游标。这样,当需要在 Recordset 中单程移动时就可提高性能。

键集游标(AdOpenKeyset:1) ― 其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许 Recordset 中各种类型的移动。

动态游标(adLockDynamic:2) ― 用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的 Recordset 中各种类型的移动。如果提供者支持,可使用书签。

静态游标(AdOpenStatic:3) ― 提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许 Recordset 中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端 (ADOR) Recordset 对象时唯一允许使用的游标类型。

我们在打开 Recordset 之前应该设置 CursorType 属性来选择游标类型,或使用 Open 方法传递 CursorType 参数。一些数据库不支持所有游标类型。请查看相关数据库的文档。如果没有指定游标类型,ADO 将默认打开仅向前游标。

要点2:打开 Recordset 时,当前记录位于第一个记录(如果有),并且 BOF 和 EOF 属性被设置为 False。如果没有记录,BOF 和 EOF 属性设置是 True。

要点3:如果数据库支持相关的功能,可以使用 MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法以及 Move 方法,和 AbsolutePosition、AbsolutePage 和 Filter 属性来重新确定当前记录的位置。仅向前 Recordset 对象只支持 MoveNext 方法。当使用 Move 方法访问每个记录(或枚举 Recordset)时,可使用 BOF 和 EOF 属性查看是否移动已经超过了 Recordset 的开始或结尾。

要点4:Recordset 对象可支持两类更新:立即更新和批更新。使用立即更新,一旦调用 Update 方法,对数据的所有更改将被立即写入基本数据源。也可以使用 AddNew 和 Update 方法将值的数组作为参数传递,同时更新记录的若干字段。如果提供者支持批更新,可以使提供者将多个记录的更改存入缓存,然后使用 UpdateBatch 方法在单个调用中将它们传送给数据库。这种情况应用于使用 AddNew、Update 和 Delete 方法所做的更改。调用 UpdateBatch 方法后,可以使用 Status 属性检查任何数据冲突并加以解决。

Error对象

包含与单个操作有关的数据访问错误或警告的详细信息。

任何涉及 ADO 对象的操作都会生成一个或多个错误。每个错误出现时,一个或多个 Error 对象将被放到 Connection 对象的 Errors 集合中。当另一个 ADO 操作产生错误时,Errors 集合将被清空,并在其中放入新的 Error 对象集。

通过 Error 对象的属性可获得每个错误的详细信息,其中包括以下内容:
Description    包含错误的文本。
Number        包含错误常量的长整型整数值。
Source        标识产生错误的对象。在向数据源发出请求之后,如果 Errors 集合中有多个 Error 对象,则将会用到该属性。
SQLState 和 NativeError        提供来自 SQL 数据源的信息。

Paramete对象

参数化查询或与存储过程的 Command 对象相关联的参数。我们可以使用 Parameter 对象的集合、方法、和属性可进行如下操作:

1、使用 Name 属性可设置或返回参数名称。
2、使用 Value 属性可设置或返回参数值。
3、使用 Attributes 和 Direction、Precision、NumericScale、Size 以及 Type 属性可设置或返回参数特性。

4、使用 AppendChunk 方法可将长整型二进制或字符数据传递给参数。

如果知道与想要调用的存储过程或参数化查询相关联的参数属性和名称,则可使用 CreateParameter 方法创建带有相应属性设置的 Parameter 对象,并使用 Append 方法将它们添加到 Parameters 集合中。

Field对象

代表使用普通数据类型的数据的列。每个 Field 对象对应于 Recordset 中的一列。
我们使用 Field 对象的集合、方法、和属性可进行如下操作:

1、使用 Name 属性可返回字段名。
2、使用 Value 属性可查看或更改字段中的数据。
3、使用 Type、Precision 和 NumericScale 属性可返回字段的基本特性。
4、使用 DefinedSize 属性可返回已声明的字段大小。
5、使用 ActualSize 属性可返回给定字段中数据的实际大小。
6、使用 Attributes 属性和 Properties 集合可决定对于给定字段哪些类型的功能受到支持。
7、使用 AppendChunk 和 GetChunk 方法可处理包含长二进制或长字符数据的字段值。
8、如果数据库支持批更新,可使用 OriginalValue 和 UnderlyingValue 属性在批更新期间解决字段值之间的差异。

ADO常用方法

方法 语法格式 说明
AddNew recordset.AddNew [FieldList, Values] 创建可更新 Recordset 对象的新记录。
Append collection.Append object

fields.Append Name, Type, DefinedSize, Attrib

将对象追加到集合中。如果集合是 Fields ,可以先创建新的 Field 对象然后再将其追加到集合中。
AppendChunk object.AppendChunk Data 将数据追加到大型文本、二进制数据 Field 或 Parameter 对象。
BeginTrans 、 CommitTrans 、 RollbackTrans connection.BeginTrans connection.CommitTrans connection.RollbackTrans BeginTrans - 开始新事务。
CommitTrans - 保存任何更改并结束当前事务。它也可能启动新事务。
RollbackTrans - 取消当前事务中所作的任何更改并结束事务。它也可能启动新事务。
Cancel object.Cancel 取消执行挂起的异步 Execute 或 Open 方法的调用。
CancelBatch recordset.CancelBatch [AffectRecords] 取消挂起的批更新。
CancelUpdate recordset.CancelUpdate 取消在调用 Update 方法前对当前记录或新记录所作的任何更改。
Clear Errors.Clear 删除集合中的所有对象。
Clone Set rstDuplicate = rstOriginal.Clone (LockType) 创建与现有 Recordset 对象相同的复制 Recordset 对象。可选择指定该副本为只读。
Close object.Close 关闭打开的对象及任何相关对象。
CompareBookmarks result = recordset.CompareBookmarks(Bookmark1, Bookmark2) As CompareEnum 比较两个书签并返回它们相差值的说明。
CreateParameter Set parameter = command.CreateParameter ([Name][, Type][, Direction][, Size][, Value]) 使用指定属性创建新的 Parameter 对象。
Delete collection.Delete objectItem 从集合中删除对象。
Execute Set recordset = command.Execute( RecordsAffected[, Parameters][, Options] ) 执行在 Command 或 Recordset 对象中指定的查询、 SQL 语句或存储过程。
Find Find (string[, SkipRows][, searchDirection, startposition]) 搜索 Recordset 中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。
GetChunk variable = field.GetChunk( Size ) 返回大型文本或二进制数据 Field 对象的全部或部分内容 。
GetRows array = recordset.GetRows([Rows][, Start][, Fields] ) 将 Recordset 对象的多个记录恢复到二维数组中。
GetString Set Variant = recordset.GetString(StringFormat[, NumRows][, ColumnDelimiter][, RowDelimiter][, NullExpr]) 将 Recordset 作为字符串返回。
Item Set object = collection.Item ( Index ) 根据名称或序号返回集合的特定成员。
Move recordset.Move NumRecords[, Start] 移动 Recordset 对象中当前记录的位置。
MoveFirst | MoveLast | MoveNext | MovePrevious recordset.{MoveFirst | MoveLast | MoveNext | MovePrevious} 在指定 Recordset 对象中移动到第一个、最后一个、下一个或前一个记录并使该记录成为当前记录。
NextRecordset Set recordset2 = recordset1.NextRecordset( [RecordsAffected] ) 清除当前 Recordset 对象并通过提前执行命令序列返回下一个记录集。
Open connection.Open [ConnectionString][, UserID][, Password][, Options]

recordset.Open [Source][, ActiveConnection][, CursorType][, LockType][, Options]
打开到数据源的连接。
打开游标。
OpenSchema Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID) 从提供者获取数据库模式信息。返回包含模式信息的 Recordset 对象。 Recordset 将以只读、静态游标打开。
Refresh collection.Refresh 更新集合中的对象以便反映来自提供者的可用对象和特定于提供者的对象。
Requery recordset.Requery [Options] 通过重新执行对象所基于的查询,更新 Recordset 对象中的数据。方法刷新来自数据源的 Recordset 对象的全部内容。调用该方法等于相继调用 Close 和 Open 方法。
Resync recordset.Resync [AffectRecords][, ResyncValues] 从基本数据库刷新当前 Recordset 对象中的数据。
Save recordset.Save FileName, PersistFormat 将 Recordset 保存(持久)在文件中。
Seek recordset.Seek KeyValues, SeekOption 搜索 Recordset 的索引,快速定位与指定值相匹配的行,并将当前行更改为该行。
Supports boolean = recordset.Supports( CursorOptions ) 确定指定的 Recordset 对象是否支持特定类型的功能 , 如 adAddNew , adDelete , AdUpdate 等。
Update recordset.Update [Fields, Values] 保存对 Recordset 对象的当前记录所做的所有更改。如果希望取消对当前记录所做的任何更改或者放弃新添加的记录,则必须调用 CancelUpdate 方法。
UpdateBatch recordset.UpdateBatch [AffectRecords] 将所有挂起的批更新写入数据库。只能对键集或静态游标使用批更新,要取消所有挂起的批更新,使用 CancelBatch 方法


ADO常用属性

属性 说明
AbsolutePage 指定当前记录所在的页。
AbsolutePosition 指定 Recordset 对象当前记录的序号位置。
ActiveCommand 指示创建关联的 Recordset 对象的 Command 对象。
ActiveConnection 指示指定的 Command 或 Recordset 对象当前所属的 Connection 对象。
BOF 、 EOF BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前。

EOF 指示当前记录位置位于 Recordset 对象的最后一个记录之后。

CommandText 包含要根据提供者发送的命令的文本。
CommandTimeout 指示在终止尝试和产生错误之前执行命令期间需等待的时间。
CommandType 指示 Command 对象的类型。
ConnectionString 包含用于建立连接数据源的信息。
Provider= 指定用来连接的提供者名称。

File Name= 指定包含预先设置连接信息的特定提供者的文件名称(例如,持久数据源对象)。

Remote Provider= 指定打开客户端连接时使用的提供者名称。(仅限于远程数据服务)

Remote Server= 指定打开客户端连接时使用的服务器的路径名称。(仅限于远程数据服务)

ConnectionTimeout 指示在终止尝试和产生错误前建立连接期间所等待的时间。
Count 指示集合中对象的数目。
CursorType 指示在 Recordset 对象中使用的游标类型。详细内容见 ADO 对象 Recordset 要点 1 部分。
LockType 指示编辑过程中对记录使用的锁定类型。有以下几种类型:
adLockReadOnly 默认值,只读。无法更改数据。
adLockPessimistic 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。adLockOptimistic 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。
adLockBatchOptimistic 开放式批更新。用于与立即更新模式相反的批更新模式
PageCount 指示 Recordset 对象包含的数据页数。
PageSize 指示 Recordset 中一页所包含的记录数。
Source 1 、指示产生错误的原始对象或应用程序的名称。
2 、指示 Recordset 对象中数据的来源( Command 对象、 SQL 语句、表的名称或存储过程)。


附:一些常量:
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- AffectEnum Values ----
Const adAffectCurrent = 1
Const adAffectGroup = 2
Const adAffectAllChapters = 4

更多常量信息请查阅文件:adovbs.inc,该文件在winxp系统中默认的路径为: C:\Program Files\Common Files\System\ado,其他系统请自行搜索。
 

我的网络营销boogger
http://china-news-it.blogspot.com
需要代理才可以看





<< 主页

存档

2007/4/8 - 2007/4/15   2007/4/15 - 2007/4/22   2007/4/22 - 2007/4/29   2007/4/29 - 2007/5/6   2007/5/6 - 2007/5/13   2007/5/13 - 2007/5/20   2007/5/20 - 2007/5/27   2007/5/27 - 2007/6/3   2007/6/3 - 2007/6/10   2007/6/10 - 2007/6/17   2007/6/17 - 2007/6/24   2007/6/24 - 2007/7/1   2007/7/8 - 2007/7/15   2007/12/2 - 2007/12/9   2007/12/9 - 2007/12/16   2007/12/16 - 2007/12/23   2009/10/18 - 2009/10/25   2010/1/10 - 2010/1/17  

This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]