26
第第第第 ASP 第第第第ADO Connect 第第 Recordset 第第

第十四讲 ASP 应用之六: ADO

Embed Size (px)

DESCRIPTION

第十四讲 ASP 应用之六: ADO. Connect 对象 Recordset 对象. Connection 对象中的 Open 方法建立到数据源的物理连接 , 使用 Close 方法将其断开 ;Recordset 对象中的使用 AddNew 、 Update 和 Delete 方法所做的更改,在最后分页中提到了 Recordset 对象中 AbsolutePage 和 RecordCount 属性。在这里我想有必要再较系统说一下 ADO 的各种对象的方法、属性。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第十四讲  ASP 应用之六: ADO

第十四讲 ASP 应用之六:ADO

Connect 对象Recordset 对象

Page 2: 第十四讲  ASP 应用之六: ADO

Connection 对象中的 Open 方法建立到数据源的物理连接 , 使用 Close 方法将其断开 ;Recordset 对象中的使用 AddNew 、 Update 和 Delete 方法所做的更改,在最后分页中提到了 Recordset 对象中 AbsolutePage 和 RecordCount 属性。在这里我想有必要再较系统说一下 ADO 的各种对象的方法、属性。

Page 3: 第十四讲  ASP 应用之六: ADO

Connection 对象(代表打开的、与数据源的连接。)RecordSet 对象(代表来自基本表或命令执行结果的记录的全集。)

Page 4: 第十四讲  ASP 应用之六: ADO

Connection 对象的方法• 1 、 Open 方法

connection.Open ConnectionString, UserID, Password, Options

• ConnectionString 可选,字符串,包含连接信息。UserID 可选,字符串,包含建立连接时所使用用户名。Password 可选,字符串,包含建立连接时所使用密码。Options 可选, ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量:adConnectUnspecified (默认)同步打开连接。 adAsyncConnect 异步打开连接。

Page 5: 第十四讲  ASP 应用之六: ADO

Connection 对象的方法• 2 、 Execute 方法

connection.Execute CommandText, RecordsAffected• CommandText 字符串,包含要执行的 SQL 语句、表名

、存储过程或特定提供者的文本。• RecordsAffected 可选,长整型变量,提供者向其返回操

作所影响的记录数目。

Page 6: 第十四讲  ASP 应用之六: ADO

Connection 对象的方法• 3 、 Close 方法

connection.Close使用 Close 方法可关闭 Connection 对象以便释放所有关联的系统资源。需要注意的是:( 1 )关闭对象并非将它从内存中删除,可以更改它的属性设置并且在此后再次打开。( 2 )要将对象从内存中完全删除,可将对象变量设置为 Nothing 。( 3 )使用 Close 方法关闭 Connection 对象的同时,也将关闭与连接相关联的任何活动 Recordset 对象。( 4 )关闭 Connection 对象后,调用任何需要打开与对数据源连接的方法都将产生错误。

Page 7: 第十四讲  ASP 应用之六: ADO

Connection 对象的属性• 1 、 Provider 属性

使用 Provider 属性指定 OLE DB 提供者。需要注意的是:调用 Open 方法时在多处指定提供者可能会产生无法预料的后果。2 、 ConnectionString 属性包含用于建立连接数据源的信息。3 、 ConnectionTimeout 属性指示在终止尝试和产生错误前建立连接期间所等待的时间,等待连接打开的时间的长整型值(单位为秒)。默认值为 15 。

Page 8: 第十四讲  ASP 应用之六: ADO

Connection 对象的属性• 4 、 Mode 属性

指示在 Connection 中修改数据的可用权限。常量 说明 AdModeUnknown 默认值。表明权限尚未设置或无法确定。 AdModeRead 表明权限为只读。 AdModeWrite 表明权限为只写。 AdModeReadWrite 表明权限为读 / 写。 AdModeShareDenyRead 防止其他用户使用读权限打开连接。 AdModeShareDenyWrite 防止其他用户使用写权限打开连接。 AdModeShareExclusive 防止其他用户打开连接。 AdModeShareDenyNone 防止其他用户使用任何权限打开连接。 需要注意的是:使用 Mode 属性可设置或返回当前连接上提供者正在使用的访问权限。 Mode 属性只能在关闭 Connection 对象时才能够设置。

Page 9: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 1 、 CursorType 属性

AdOpenForwardOnly : 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。(顾名思义,这种游标只能向前移动。然而,由于这种游标功能有限,将它用于系统资源时是非常有效的。) AdOpenKeyset : 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。( KeySet 游标允许你看见自它创建起其他用户所做的修改,然而你却不能看到其他用户增加或删除的记录。)

Page 10: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 1 、 CursorType 属性

AdOpenDynamic :动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。(此类型的游标功能强大同时也是耗费系统资源最多的游标。 Dynamic 游标可以看到他们保存记录集合的所有变化。使用Dynamic 游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。 )

Page 11: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 1 、 CursorType 属性

AdOpenStatic :静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。( Static 类游标只是数据的一幅快照。这就是说,它无法看到自它创建以后其他用户对 RecordSet 所做的修改。采用这类游标你可以向前和向后航行。由于其功能简单,资源的需求比 Dynamic 要小! ) 需要注意的是:一旦打开 RecordSet ,你就无法改变 CursorType 属性。但是,如果你首先关闭 RecordSet ,改变 CursorType 属性,然后重新打开 RecordSet ,那么你仍可以有效地改变游标的类型!

Page 12: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 2 、 LockType 属性

在任何同时可被多用户修改的数据库应用程序中,你必须处理可能发生的多个用户同时对同一条记录进行操作时的情况。当这种情况出现时,数据的完整性就会受到威胁,这是因为一个用户可能会在不自觉地在保存自己所做的修改时覆盖他人的修改。到时候你会觉得自己好象是没有做事。为了处理这种情况。 ADO 允许你在对 RecordSet 对象进行更新时决定并发事件控制的类型,当一个用户编辑时,如何由他对记录进行锁定。这就是由 LockType 属性所决定的。

Page 13: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 2 、 LockType 属性

这个属性有四个值:adLockReadonly :默认值,只读。无法更改数据。(这是 RecodSet 的默认值,如果你把锁定的方式设为该值,那么你将不能更新 Recordset 。)adLockPessimistic :保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。(如果设置为此类锁定,记录被锁定,且只有在编辑开始到将记录更新的提交给数据提供者这段时间内进行编辑的用户才可以访问 ! )

Page 14: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 2 、 LockType 属性

adLockOptimistic :开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。(只有在将数据提交给数据提供者的那一瞬间才把记录锁定。)adlockBatchOptimistic :开放式批更新。用于与立即更新模式相反的批更新模式。(设定为这种类型的锁定制式将被称为批量更新模式的RecordSet 。 可以加快更新 RecordSet 修改数据的速度,但因为同时更新多个记录,它也会恶化与并发访问相关的问题! )

Page 15: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 3 、 AbsolutePage 属性

AbsolutePage 属性设定当前记录的位置是位于哪一页的页数编号;使用 PageSize 属性将 Recordset 对象分割为逻辑上的页数,每一页的记录数为 PageSize( 除了最后一页可能会有少于 PageSize 的记录数 ) 。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。 与 AbsolutePosition 属性相同, AbsolutePage 属性是以 1 为起始的,若当前记录为 Recordset 的第一行记录, AbsolutePage 为 1 。可以设定 AbsolutePage 属性,以移动到一个指定页的第一行记录位置。

Page 16: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 4 、 AbsolutePosition 属性

若您需要确定目前指标在 RecordSet 中的位置,您可以用AbsolutePosition 属性。 AbsolutePosition 属性的数值为目前指标相对於第一笔的位置,由 1算起,即第一笔的 AbsolutePosition 为 1 。 注意 , 在存取 RecordSet 时,无法保证 RecordSet每次都以同样的顺序出现。 若要启用 AbsolutePosition ,必须先设定为使用用户端 cursor( 指针 ): rs.CursorLocation=3

Page 17: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 5 、 PageCount 属性

使用 PageCount 属性,决定 Recordset 对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于 PageSize 属性的设定,即使最后一页的记录数比 PageSize 的值少,最后一页也算是PageCount 的一页。必须注意也并不是所有的数据提供者都支持此项属性。

Page 18: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 6 、 PageSize 属性

PageSize 属性是决定 ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用 AbsolutePage 属性移到其它逻辑页的第一条记录。 PageSize 属性能随时被设定。

Page 19: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 7 、 RecordCount 属性

这也是一个非常常用和重要的属性,我们常用 RecordCount 属性来找出一个 Recordset 对象包括多少条记录。使用 RecordCount 属性可确定 Recordset 对象中记录的数目。 ADO 无法确定记录数时,或者如果提供者或游标类型不支持 RecordCount ,则该属性返回 – 1 。读已关闭的 Recordset 上的 RecordCount 属性将产生错误。 Recordset 对象的游标类型会影响是否能够确定记录的数目。对仅向前游标, RecordCount 属性将返回 -1 ,对静态或键集游标返回实际计数,对动态游标取决于数据源返回 -1 或实际计数。

Page 20: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 8 、 BOF 与 EOF 属性

通常我们在 ASP 程序中编写代码来检验 BOF 与 EOF 属性,从而得知目前指标所指向的 RecordSet 的位置,使用 BOF 与 EOF 属性,可以得知一个 Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该 Recordset 对象的范围。若当前记录的位置是在一个 Recordset 对象第一行记录之前时, BOF属性返回 true ,反之则返回 false 。 若当前记录的位置是在一个 Recordset 对象最后一行记录之后时, EOF 属性返回 true ,反之则返回 false 。 ( BOF 与 EOF 都为 True 表示在 RecordSet 里没有任何记录。)

Page 21: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 9 、 Filter 属性

为 Recordset 中的数据指定筛选条件,使用 Filter 属性可选择性地屏蔽 Recordset 对象中的记录,已筛选的 Recordset 将成为当前游标。

• 这将影响基于当前游标返回值的其他属性,如 AbsolutePosition 、 AbsolutePage 、 RecordCount 和 PageCount ,因为将 Filter 属性设置为特

• 定值可将当前记录移动到满足新值的第一个记录。 这属性我认为相当有用处,有的时候我们打开了 Recordset 进行了某些判断以后我们还想过滤记录也就是重新调整 sql 语句,难道我们关闭 Recordset 再用新的 SQL 语句打开?不是,我们用 Filter 属性进行过滤

Page 22: 第十四讲  ASP 应用之六: ADO

Recordset 对象的属性• 9 、 Filter 属性

比如说rs.open exec,conn,1,1if .... then rs.filter="name='xxx'"而不是rs.open exec,conn,1,1if ... thenrs.closeexec=exec&" where name='xxx'"rs.open exec,conn,1,1end if

Page 23: 第十四讲  ASP 应用之六: ADO

Recordset 对象的方法• 1 、 AddNew 方法

创建可更新 Recordset 对象的新记录。recordset.AddNew FieldList, ValuesFieldList 可选。新记录中字段的单个名称、一组名称或序号位置。Values 可选。新记录中字段的单个或一组值。如果 Fields 是数组,那么 Values 也必须是有相同成员数的数组,否则将发生错误。字段名称的次序必须与每个数组中的字段值的次序相匹配。

Page 24: 第十四讲  ASP 应用之六: ADO

Recordset 对象的方法• 1 、 AddNew 方法

我们一般是rs.addnewrs("xx")=xxrs("xx")=xxrs.update需要注意的是在立即更新模式(调用 Update 方法时提供者会立即将更改写入基本数据源)下,调用不带参数的 AddNew 方法可将 EditMode 属性设置为 adEditAdd 。提供者将任何字段值的更改缓存在本地。调用 Update 方法可将新记录传递到数据库并将 EditMode 属性重置为 adEditNone 。如果传送了 Fields 和 Values 参数, ADO 则立即将新记录传递到数据库(无须调用 Update ),且 EditMode 属性值没有改变 (adEditNone) 。

Page 25: 第十四讲  ASP 应用之六: ADO

Recordset 对象的方法• 1 、 AddNew 方法

在 ASP 中使用 ADO 的 AddNew 方法和直接使用“ Insert into...” 语句有和不同?那种方式更好?

ADO 的 AddNew 方法只是将“ Insert into ” 语句封装了起来,所以,当对大量数据进行操作的时候,直接使用 SQL 语句将会大大加快存取数据的速度,因为他减少了 ADO 的“翻译”时间。

Page 26: 第十四讲  ASP 应用之六: ADO

Recordset 对象的方法• 1 、 AddNew 方法

在 ASP 中使用 ADO 的 AddNew 方法和直接使用“ Insert into...” 语句有和不同?那种方式更好?

ADO 的 AddNew 方法只是将“ Insert into ” 语句封装了起来,所以,当对大量数据进行操作的时候,直接使用 SQL 语句将会大大加快存取数据的速度,因为他减少了 ADO 的“翻译”时间。