1 / 41

第 6 章 ADO 数据访问接口

第 6 章 ADO 数据访问接口. 内容提要. 本章介绍 ADO 的基本概念,以及如何在 ASP 程序中使用 ADO 的对象。 介绍 ADO 的对象 Connection 、 RecordSet 和 Command 的使用。 介绍 SQL 语句的基本概念及如何利用 SQL 语句操作数据库。并介绍访问数据库的三个基本格式。. ADO 数据访问接口概述. ADO 常用的四种对象及其功能如下。 ( 1 ) 连接对象( Connection ): 用来连接数据库。 ( 2 )记录集对象( RecordSet ): 用来保存查询语句返回的结果。

evan
Download Presentation

第 6 章 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. 第6章ADO数据访问接口

  2. 内容提要 • 本章介绍ADO的基本概念,以及如何在ASP程序中使用ADO的对象。 • 介绍ADO的对象Connection、RecordSet和Command的使用。 • 介绍SQL语句的基本概念及如何利用SQL语句操作数据库。并介绍访问数据库的三个基本格式。

  3. ADO数据访问接口概述 • ADO常用的四种对象及其功能如下。 • (1)连接对象(Connection):用来连接数据库。 • (2)记录集对象(RecordSet):用来保存查询语句返回的结果。 • (3)命令对象(Command):用来执行SQL(Structured Query Language)语句或者SQL Server的存储过程。 • (4)参数对象(Parameter):用来为存储过程或查询提供参数。 • 下面介绍常用的连接对象(Connection)、记录集对象(RecordSet)、命令对象(Command)。

  4. Connection数据对象 • 与数据库的所有通信都通过一个打开的Connection对象进行。对一个数据库进行数据的插入和读取之前,必须先打开数据库的连接 • 数据库表是由行和列组成的一个二维表,当使用ADO打开数据库的时候,会有一个指针指向某一行记录,默认的情况下该指针指向数据库表的第一行。假定该指针叫“rs”,如果要访问数据库表的字段,可以用图6-1所示的方法。

  5. 关系型数据库表与指针 • 其中:写法rs(0)、rs(“学号”)、rs.Fields(0)和rs.Fields(“学号”)是相同的,写法rs(3)、rs(“语文”)、rs.Fields(3)和rs.Fields(“语文”)是相同的,其余类推。根据上表和注释: • rs(4).Name 等价于 rs.Fields(4).Name 等价于 "数学" • rs(1).Name等价于rs.Fields(1).Name等价于"性别" • 假设当前的指针指向第三行记录,那么 • rs(2).Value等价于rs("姓名")等价于rs(2) 等价于"小张" • rs(4).Value等价于rs(4) 等价于rs("数学")等价于60

  6. 打开和关闭数据库连接 • 要建立与一个数据库的连接,首先创建Connection对象的一个实例,然后调用Connection对象的Open方法打开一个连接 • 通过程序6-01.asp输出数据库的表头。

  7. 数据库调用的基本格式 • 格式一:数据库调用的基本格式 • 格式说明:利用Execute方法执行SQL语句 • '第一步:建立Connection对象 • set conn = Server.CreateObject("ADODB.Connection") • '第二步:使用Connection对象的Open方法建立数据库连接 • conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_ • Server.MapPath("person.mdb")) • '第三步:使用Connection对象的Execute方法执行SQL语句 • '如果执行查询语句 • set rs = conn.Execute( "数据查询语句" ) • '如果执行数据操纵语句 • conn.Execute( "数据操纵语句" )

  8. 格式一的特点 • 格式一的特点是:RecordSet对象的实例rs是利用Connection对象的Execute方法建立的,建立的rs对象的指针只能向后,不能向前移动。 • 第一步建立了Connection对象的一个实例,第二步利用Open方法和用Access数据驱动程序打开服务器上的某个Access数据库,第三步执行SQL语句。

  9. 参数 说明 用法 Dsn ODBC数据源的名称 Dsn="ODBC名称" User 数据库登录的用户名 User="Database User" Password 数据库登录的密码 Password ="User Password" Driver 数据库驱动程序的类型 Access用Access的驱动,其他数据库用其他驱动。 Dbq 数据库的物理路径 Dbq = "C:\accdb.mdb" Provider 数据提供者 Provider="Microsoft.Jet.OLEDB.4.0" Connection对象

  10. 连接的数据库 说明 Oracle Driver={Microsoft ODBC for Oracle};Server=服务器地址;User=;Password= SQL Server Server=服务器地址;Database=数据库名;uid=用户名;pwd='' Excel Driver={Microsoft Excel Driver(*.xls)};Dbq=Excel文件的物理路径 文本文件 Driver={Microsoft Text Driver(*.txt;*.csv)};DefaultDir=文件的物理路径 其他类型的数据库连接

  11. 方法名称 说明 用法 Open() 建立连接 Conn.Open("数据库连接串") Close() 关闭与数据库连接 Conn.Close() Execute() 执行数据库查询 Conn.Execute(SQL语句或者表名) BeginTrans() 开始事务处理 Conn.BeginTrans() CommitTrans() 提交事务处理 Conn.CommitTrans() RollbackTrans() 取消事务处理 Conn.RollbackTRans() Connection对象的方法和属性

  12. 属性名称 说明 用法 CommandTimeout Execute方法最长执行时间 默认值为30秒钟,可以修改 ConnectionTimeout Open方法最长执行时间 默认值为15秒,可以修改 ConnectionString 数据库的连接串 可以将连接串赋值给该属性 Mode 用来设置操作权限 1为只读、2为只写、3为可读可写 Version 获取ADO的版本信息 Conn.Version Connection对象的属性

  13. 向浏览器输出数据库内容 • 向浏览器输出了表头后,可以利用RecordSet记录集返回数据库表中的数据, • 如程序6-02.asp所示。

  14. 输出表中所有数据 • 用一个循环输出数据库中所有的数据。当数据库打开时,rs对象定位在数据库表的第一条记录上,输出第一条记录的内容;要想输出第二条记录,必须执行rs.MoveNext()指令,让它移动到下一条记录。 • rs.BOF(Begin Of File,文件开头)和rs.EOF(End Of File,文件结尾)这两条指令判断记录指针是否移动最前面和最后面,BOF的位置是在第一条记录之前,EOF是在最后一条记录之后。如果rs指针在最后一条记录上,再执行一次MoveNext()时则rs.EOF为真。如果rs.EOF或者rs.BOF为真,这时读取数据会出错。

  15. 数据库表的结构

  16. 使用事务 • 事务在实际编程中使用比较频繁。事务典型的特征是:事务中一般包含几个事件,只有几个事件同时执行成功,整个事务才被执行,否则事务中的事件将不被执行。 • 比如:在ATM机上取200元,需要执行两个操作,1、从银行账户上减去200;2、ATM机将钱返给用户。这两个事件将构成事务。在实际编程中,需要同时成功,同时失败。 • 使用方法如程序6-05.asp所示。

  17. Connection对象中的Errors集合 • Error对象是Connection对象的子对象。数据库程序运行的时候,一个错误就是一个Error对象,所有的Error对象就组成了Errors集合,又称为错误集合。 • 可以利用Errors集合的Count属性来判断是否有错误发生,还可以提取出错误的描述,最后根据错误的类型,给出相应的解决措施。Errors对象提供一些属性来得到错误信息

  18. 参数 说明 用法 Number 错误编号 Err.Number Description 错误描述 Err.Description Source 发生错误的原因 Err.Source HelpContext 错误的提示文字 Err.HelpContext HelpFile 错误的提示文件 Err.HelpFile NativeError 数据库服务器产生的错误 Err.NativeError Error对象的属性

  19. RecordSet数据对象 • 记录集可以用来代替表中的记录。一个记录集包含一条或多条记录(行),每条记录包括一个或多个域(字段)。在任何时刻,只有一条记录是当前记录。 • 创建记录集对象的一个实例,可以使用Connection对象的Execute()方法,用Execute()创建的记录集指针只能向下,而不能向上移动,即不能执行MoveFirst()和MovePrevious()指令。

  20. RecordSet对象的属性及方法 • 利用RecordSet对象的属性和方法可以完全操作一个数据库,理论上只要SQL语句可以完成的操作利用RecordSet对象都可以实现。RecordSet对象的属性和方法很多,常用的方法如表6-6所示。

  21. 方法 说明 用法 Open() 打开记录集 rs.Open() Close() 关闭记录集 rs.Close() Requery 重新打开记录集 rs.Requery() Move() 当前记录前后移动条数 rs.Move(4) 向后面移动4行 MoveFirst() 移动到第一条记录 rs.MoveFirst() MoveNext() 移动到下一条记录 rs.MoveNext() MovePrevious() 移动到记录集中的上一条记录 rs. MovePrevious() MoveLast() 移动到记录集的最后一条记录 rs. MoveLast() AddNew() 向记录集中添加一条新记录 rs.AddNew() Delete() 从记录集中删除当前记录 rs. Delete() Update() 保存对当前记录所做的修改 rs. Update() UpdateBatch() 保存对一个或多个记录的修改 rs. UpdateBatch() CancelBatch() 取消一批更新 rs. CancelBatch() RecordSet对象的方法

  22. 属性 说明 用法 ActiveConnection 当前记录集用的数据连接 rs. ActiveConnection = conn RecordCounts 记录集的总数 rs.RecordCounts BOF 记录集的开头 rs.BOF EOF 记录集的结尾 rs.EOF PageCount 返回记录集中的逻辑页数 rs.PageCount PageSize 返回逻辑页中的记录个数 rs.PageSize 默认值是10 AbsolutePage 指定当前的页 rs.AbsolutePage AbsolutePosition 指定当前的记录 rs.AbsolutePosition RecordSet对象的属性

  23. 使用RecordSet对象打开数据库 • 格式二:数据库调用的基本格式 • 格式说明:利用RecordSet对象打开数据库表 • '第一步:建立Connection对象 • set conn = Server.CreateObject("ADODB.Connection") • '第二步:使用Connection对象的Open方法建立数据库链接 • conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_ • Server.MapPath("Access数据库")) • '第三步:建立RecordSet对象 • set rs = Server.CreateObject("ADODB.Recordset") • '第四步:利用RecordSet对象的Open方法打开数据库 • rs.Open "SQL语句", conn, 打开方式, 锁定类型

  24. 打开类型的四个参数: • (1)adOpenFowardOnly:对应的数字是0(默认值),记录集只能向前移动。这些参数对应的数字,都保存在系统文件Adovbs.inc中。 • (2)adOpenKeyset:对应的数字是1,记录集可以向前或向后移动。如果另一个用户删除或改变一条记录,记录集中将反映这个变化。但是,如果另一个用户添加一条新记录,新记录不会出现在记录集中。 • (3)adOpenDynamic:对应的数字是2,使用动态游标,可以在记录集中向前或向后移动。其他用户造成的记录的任何变化都将在记录集中有所反映。 • (4)adOpenStatic。对应的数字是3,使用静态游标,可以在记录集中向前或向后移动。但是,静态游标不会对其他用户造成的记录变化有所反映。

  25. 锁定类型的参数如下 • (1)adLockReadOnly:只读锁定,对应的数字是1(默认值),不能修改记录集中的记录。 • (2)adLockPessimistic:悲观锁定,对应的数字是2,指定在编辑一个记录时,立即锁定它。 • 进入锁定----- rs("数学") = rs("数学") + 100 • rs("语文") = rs("语文") + 100 • rs.Update() ------解除锁定

  26. 锁定类型的参数 • (3)adLockOptimistic:乐观锁定,对应的数字是3,指定只有调用记录集的Update方法时,才锁定记录。 • rs("数学") = rs("数学") + 100 • rs("语文") = rs("语文") + 100 • 进入锁定----- rs.Update() ------解除锁定 • (4)adLockBatchOptimistic:批次乐观锁定,对应的数字是4,指定记录只能成批地更新。 • For I = 1 to 10 • rs ("语文")= rs ("语文") + 100 • rs ("数学") = rs ("数学") + 100 • rs.MoveNext() • Next • 进入锁定----- rs.UpdateBatch() ------解除锁定

  27. RecordSet • 当数据库第一次打开时,RecordSet指针定位在第一条记录上,可以利用AbsolutePosition直接定位到某条记录上, • 基本的语法是:AbsolutePosition=N,如程序6-07.asp文件所示。

  28. AbsolutePage • 还有一个属性是AbsolutePage,当调用AbsolutePage时,系统将对数据记录进行分页,默认每页为10条记录,AbsolutePage为几,记录指针就自动定位到第几页的第一条记录上。 • 比如说,AbsolutePage = 3,则记录指针就自动定位到第21条记录上去了,此时AbsolutePosition = 21。计算公式为:AbsolutePosition = (AbsolutePage-1)*PageSize,PageSize默认是10,也可以设置为其他的值。 • 使用方法如程序6-08.asp所示

  29. 实现数据库的分页显示 • 数据库中可能有成千上万条记录,如果一次都显示出来的话消耗的时间太多。 • 下面通过一个案例分成六个版本实现数据库的分页显示。

  30. 案例6-1 分页显示 • 首先利用格式二将数据库表中某页的所有记录输出,如程序pageV1.asp所示。 • 在程序中加上翻页的超级链接就可以实现翻页,如程序pageV2.asp所示。 • 可以利用PageCount属性得到总页数,修正这些可能出现的错误,得到版本三。如程序pageV3.asp所示。 • 加入超级链接的版本四如程序pageV4.asp所示,将姓名一列加上超级链接。 • 偶数行和奇数行可显示不同的背景颜色。版本五将实现这些功能,如程序pageV5.asp所示。

  31. Command数据对象 • Command对象又称为命令对象,可以执行SQL语句和执行SQL Server的存储过程。通过传递SQL指令 • 对数据库提出操作要求,把得到的结果返回给RecordSet对象。

  32. 属性 说明 用法 ActiveConnection 指定Command用的连接 cmd. ActiveConnection = conn CommandText 指定数据库查询信息 cmd. ActiveConnection =表名或SQL CommandType 数据查询的类型 cmd. CommandType =1, 2,4 CommandTimeout 执行SQL语句的最长时间 默认为30秒 Prepared 是否预编译,可以加快速度 cmd.Parpared = True/ False Command对象的属性和方法

  33. 方法 说明 用法 Execute() 执行SQL语句、表名或者存储过程 cmd.Execute() CreateParameter() 创建Command对象的参数 cmd.CreateParameter() Command对象提供的方法

  34. 格式三 • 格式三:数据库调用的基本格式 • 格式说明:利用Command对象的Execute方法建立RecordSet对象 • '第一步:建立Connection对象 • set conn = Server.CreateObject("ADODB.Connection") • '第二步:使用Connection对象的Open方法建立数据库连接 • conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + • Server.MapPath("Access数据库")) • '第三步:建立Command对象 • cmd = Server.CreateObject("ADODB.Command") • cmd.ActiveConnection = conn • cmd.CommandText = sql • '第四步:使用Command对象的Execute方法执行SQL语句 • '如果执行查询语句 • rs = cmd.Execute() • '如果执行数据操纵语句 • cmd.Execute()

  35. 使用Command对象 • 使用Command对象来执行SQL 语句,如程序6-09.asp所示。

  36. 例6-2 分页列表的删除和修改 • 本案例实现的功能是:为案例6-1的分页列表添加修改数据和删除数据的功能。首先为列表添加两列:修改和删除。显示的主页面如图6-16所示。

  37. 案例6-3 分页版本的留言簿 • 这里再对留言簿作一次升级,在案例5-2的基础上加入分页功能。 • 只要更改display.asp文件就可以。

  38. 小结 • 本章重点理解访问数据库的三大基本格式及各自的特点。掌握Connection,RecordSet和Command对象的使用方法。 • 熟练掌握利用格式二实现数据库的分页显示和利用SQL语句操作数据库的方法。

  39. 本章习题 • 一、选择题 • 1. 可以使用ADO来访问的数据库是___________。 • A) Microsoft Access B) Microsoft SQL Server • C) Oracle D) 以上都可以 • 2. 命令对象(Command):用来执行___________。 • A) SQL语句B) SQL Server的存储过程 • C) 连接数据库D)返回记录集 • 3. 语句rs.Fields.Count返回的值是___________。 • A) 记录集的行数B) 记录集的列数 • C) 记录集的行数+1 D) 记录集的列数-1 • 4. 使用BeginTrans()___________,利用CommitTrans()___________,如果有错误发生,利用RollbackTrans()来___________。 • A) 提交一个事务B) 总结事务 • C) 开始一个事务D) 取消事务 • 5. 可以利用Errors集合的___________来判断是否有错误发生 • A) Number属性B) Description属性 • C) Count属性D) Source属性

  40. 二、填空题 • 1. 当执行事务的时候,如果没有错误发生,则conn.Errors.Cout将为___________。 • 2. 创建记录集对象的一个实例,可以使用___________,这种方法创建的记录集指针只能向下,而不能向上移动,即不能执行MoveFirst()和MovePrevious()指令。 • 3. 判断记录集合是否到表的最后,利用语句___________。

  41. 三、简答题与程序设计题 • 1. 简述ADO的功能及常用的三大对象的用途。 • 2. 访问数据库格式一有什么特点?可以执行哪些SQL语句? • 3. 如何实现模糊查询? • 4. 如何用变量替换SQL语句的值? • 5. 格式二的数据打开方式和锁定方式有几种?各有什么含义? • 6. 比较访问数据库的三个基本格式的异同。

More Related