1 / 26

第十四讲 ASP 应用之六: ADO

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

jerry-mays
Download Presentation

第十四讲 ASP 应用之六: ADO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十四讲 ASP应用之六:ADO Connect对象 Recordset对象

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

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

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

  5. Connection对象的方法 • 2、Execute方法connection.Execute CommandText, RecordsAffected • CommandText    字符串,包含要执行的 SQL 语句、表名、存储过程或特定提供者的文本。 • RecordsAffected    可选,长整型变量,提供者向其返回操作所影响的记录数目。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  21. Recordset 对象的属性 • 9、Filter 属性    为 Recordset 中的数据指定筛选条件,使用 Filter 属性可选择性地屏蔽 Recordset 对象中的记录,已筛选的 Recordset 将成为当前游标。 • 这将影响基于当前游标返回值的其他属性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount,因为将 Filter 属性设置为特 • 定值可将当前记录移动到满足新值的第一个记录。    这属性我认为相当有用处,有的时候我们打开了Recordset进行了某些判断以后我们还想过滤记录也就是重新调整 sql 语句,难道我们关闭Recordset再用新的SQL语句打开?不是,我们用Filter属性进行过滤

  22. 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

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

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

  25. Recordset 对象的方法 • 1、AddNew 方法 在ASP中使用ADO的AddNew方法和直接使用“Insert into...”语句有和不同?那种方式更好? ADO的AddNew方法只是将“Insert into ”语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间。

  26. Recordset 对象的方法 • 1、AddNew 方法 在ASP中使用ADO的AddNew方法和直接使用“Insert into...”语句有和不同?那种方式更好? ADO的AddNew方法只是将“Insert into ”语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间。

More Related