
第五章ASP数据库的连接 对象、RecordSe 5.1ASP连接数据库方式 51.1ODBC驱动程连接 器上安装访问数库所对应的ODBC驱动程序,ODBC数据库塑动程序一服在安装数需库管 -dver-ODBC数抵库驱动连接字符中:dbq-数需库名,山-用户名,pwd-效据库 演示示例1:连接A 数据库chap5.mdb,数据库密码是“dhsecret" (”mdb)).dbq-"& 通过“控制面板”也可以设盆ODBC连接的手工设置。打开“控制面板”,择“型 第1页找江页
第 1 页 共 22 页 本章主要介绍 ASP 连接数据库的两种方式,一种是 ODBC 驱动程序连接,一种是 OLE DB 驱动程序连接,并对两种连接方式进行比较,介绍 ADO 组件,如 Connection 对象、RecordSet 对象等的语法及使用。 5.1 ASP 连接数据库方式 在 ASP 中,利用 ADO 对象,通过数据库驱动程序可以实现对任意数据库的访问,比如: Microsoft Access 数据库、SQL Server 数据库等。数据库驱动连接主要有以下两种方式:ODBC (Open Database Connectivity)驱动程序连接和 OLE DB(Object Linking and Embedding) 驱动程序连接。ADO(ActiveX Data Object)是 Microsoft 提供的数据库访问标准组件。 ODBC 是一种可以连接数据库的驱动程序,通过 ODBC 驱动程序能够访问符合 ODBC 标 准的各种关系型数据库。由于不同数据库的驱动程序不同,因此必须在运行 ASP 程序的服务 器上安装访问数据库所对应的 ODBC 驱动程序。ODBC 数据库驱动程序一般在安装数据库管 理系统时自动安装,也可从 Microsoft 网站下载 MDAC(Microsoft Data Access Component)组 件进行安装。 在 ASP 中,利用 ADO 的 Connection 对象,通过 ODBC 数据库驱动程序连接字符串实现 与数据库的连接,语法如下: constr=”driver={ODBC 数据库驱动连接字符串};dbq=数据库名;uid=用户名;pwd=数据库 密码;” 演示示例 1:连接 Access 数据库 chap5.mdb,数据库密码是“dbsecret” set con=Server.CreateObject(“ADODB.Connection”) ‘{Microsoft Access Driver (*.mdb)} 表示 Access 数据库的 ODBC 数据库连接字符串 ‘Server.MapPath(“chap5.mdb”) 表示 chap5.mdb 的磁盘物理路径 constr=”driver={Microsoft Access Driver (*.mdb)};dbq=”& Server.MapPath(“chap5.mdb”)&” ;pwd=dbsecret;” con.Open constr 通过“控制面板”也可以设置 ODBC 连接的手工设置。打开“控制面板”,选择“管理 工具”,然后打开“ODBC 数据源管理”,选择“用户数据源”标签下的驱动程序,然后点击 “添加”按钮。如图 1、2、3 所示。最后在用户 DSN 池里就会看到添加的指定的 ODBC 数 据源

②☒ 用户系1文件16动件际连接关于 海加)… 稀砂 ①嘴搅精.用 定☐取应用)形 ☒ 达泽2地为其安装透的58动好序) 上一步充☐取消 图2 第2页共页
第 2 页 共 22 页 图 1 图 2

ODBC重1 crosoft Acces苦安装 ☒ 数据源名0 nenber 确定 说明) nenber 取泊 数指库 数招库:E:1..aer.nd山 琴助0 远择.. 罐).. 格复®).. 压蹈). 高级).. 系杯据库 无) 班据岸): 系据库红), 选项)》 图3 5.1.2 OLE DB驱动程序连接 这是ASP访问数据库的另一·种方式。OLE DB是Microsoft代营ODBC的一种数据库连 接技术,通过O1EDn驱动程序能够访问符合O1.EDB标准的各种数据库,月前,O[EDB 数据库更动程序一般在安装致据库管理系统时自动安装,也可从MrO四ff网站下载MDAC (Microsoft Data Access Component)组件白行安装. 在ASP中,利用ADO的Connection对象,通过OEDB数据库驱动程序连接字符串实 观与数据库的连接,语法如下: constr='"Provider=Microsoft Jet.OLEDB.4.0:Data Source=数据库名:Jet OLEDB:Database Pas5wod归数据库密码:” 演示示例2:连接Access数据库chap5.mdb,数据库密码是“dbsecret” set con=Server.CreateObject("ADODB.Connection") Provider=Microsoft.Jet OLEDB.4.0表示Access数据库的OLE DB数据库连接字符串 Server MapPath("ch:p5nh”表示chp5,mb的碱盘物理路径 constr-"Provider-Microsoft.Jet Ol.EDB 4.0.Data Source-"&Server MapPath("chap5.mdb")&" Jet OLEDB:Database Password-dbsecret:" con.Open constr 5.13两种方式的比较 1数据库类型 ODBC方式只作连按、访句关系梨数据库,OLE DB方式可以连接、访问关系型数据库 或非关系型数燕库,具有史大的应用领域。符合ODBC标准的数茜源是符合OLE DB标准 剪3页共22页
第 3 页 共 22 页 图 3 这是 ASP 访问数据库的另一种方式。OLE DB 是 Microsoft 代替 ODBC 的一种数据库连 接技术,通过 OLE DB 驱动程序能够访问符合 OLE DB 标准的各种数据库。目前,OLE DB 数据库驱动程序一般在安装数据库管理系统时自动安装,也可从 Microsoft 网站下载 MDAC (Microsoft Data Access Component)组件自行安装。 在 ASP 中,利用 ADO 的 Connection 对象,通过 OLE DB 数据库驱动程序连接字符串实 现与数据库的连接,语法如下: constr=”Provider= Microsoft.Jet.OLEDB.4.0;Data Source=数据库名; Jet OLEDB:Database Password=数据库密码;” 演示示例 2:连接 Access 数据库 chap5.mdb,数据库密码是“dbsecret” set con=Server.CreateObject(“ADODB.Connection”) ‘Provider=Microsoft.Jet.OLEDB.4.0 表示 Access 数据库的 OLE DB 数据库连接字符串 ‘Server.MapPath(“chap5.mdb”) 表示 chap5.mdb 的磁盘物理路径 constr=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”& Server.MapPath(“chap5.mdb”)&”; Jet OLEDB:Database Password=dbsecret;” con.Open constr 1 数据库类型 ODBC 方式只能连接、访问关系型数据库,OLE DB 方式可以连接、访问关系型数据库 或非关系型数据库,具有更大的应用领域。符合 ODBC 标准的数据源是符合 OLE DB 标准

的数据存储的子集。符合ODBC标准的数据源要符合OLE DB标准,还必须提供相应的OLE DB服务程序(Service Provider),就像SOL Server受符合ODBC标准,必须提供SQL Server ODBC界动程序一祥。现在,微软自己已轻为所有的ODBC数帮源提供了·个统·的OLE DB服务程序,叫做ODBC OLE DB Provide:.ODBC Provider的作用是替换ODBC Drive Mg,作为应用程序与ODBC驱动程序之间的桥柔,理论上不会增加任何开销。 2访问性能 由于ADO是建立在OLE DB技术上的,为了支持ODBC必须建立相应的OLE DB到 ODC的调用转换,而使用直接的OLE DB方式不带转接,从而提高处理速度,即OEDB 方式比ODBC方式连接、访问数据库的执行效率高。 5.2AD0组件常用对象 AD)组件由众多对象构成,利用这些对象的属性和方法能镶实现数据库操作,完成很多 复杂、高级的功能。其中应用较多的是两个对象Connection、Recordset以及它们的一些子对 象Eror、Field, 5.2.1 Connection对象及其子对象 Connection对象用于建立与数搭库的连接。Erx对象表示在数据库程序运行中出现的钳 误。 1 Connection对象的常用属性 (1)CommandTimeout 功能:设置Connection对象的Execute方法的最长执行时问,默认值为30秒,设定为0 表示没有时间限制。若时间已到但仍无法正常共行则结束操作。 演示示例3:设置最长执行时问为60秒. c% set con=Server.CreateObject ("ADODB.Connection") con.CommandTimeout=60 %> (2)ConnectionString 功能:指定Connection对象的数据库连接信息。 溪示示例4:建立与Aoas数据库chp5mdh的连接。 (3)ConnectionTimeout 第4页共22页
第 4 页 共 22 页 的数据存储的子集。符合 ODBC 标准的数据源要符合 OLE DB 标准,还必须提供相应的 OLE DB 服务程序(Service Provider),就像 SQL Server 要符合 ODBC 标准,必须提供 SQL Server ODBC 驱动程序一样。现在,微软自己已经为所有的 ODBC 数据源提供了一个统一的 OLE DB 服务程序,叫做 ODBC OLE DB Provider。ODBC Provider 的作用是替换 ODBC Driver Manager,作为应用程序与 ODBC 驱动程序之间的桥梁,理论上不会增加任何开销。 2 访问性能 由于 ADO 是建立在 OLE DB 技术上的,为了支持 ODBC 必须建立相应的 OLE DB 到 ODBC 的调用转换,而使用直接的 OLE DB 方式不需转换,从而提高处理速度,即 OLE DB 方式比 ODBC 方式连接、访问数据库的执行效率高。 5.2 ADO 组件常用对象 ADO 组件由众多对象构成,利用这些对象的属性和方法能够实现数据库操作,完成很多 复杂、高级的功能。其中应用较多的是两个对象 Connection、Recordset 以及它们的一些子对 象 Error、Field。 Connection 对象用于建立与数据库的连接。Error 对象表示在数据库程序运行中出现的错 误。 1 Connection 对象的常用属性 ⑴ CommandTimeout 功能:设置 Connection 对象的 Execute 方法的最长执行时间,默认值为 30 秒,设定为 0 表示没有时间限制。若时间已到但仍无法正常执行则结束操作。 演示示例 3:设置最长执行时间为 60 秒。 ⑵ ConnectionString 功能:指定 Connection 对象的数据库连接信息。 演示示例 4:建立与 Access 数据库 chap5.mdb 的连接。 ⑶ ConnectionTimeout

功能:指定利用Connection对象的Opn方法与数据库连接的最长时间,默认为15秒, 设定为D表示无限期等待。若时到已到但无法正常连接则停止共行。 滨示示例5:将与数据库连接的时间设置为10秒 (4)Mode 功能:设置连接数据库的访间权限。Mde-0,表示没有定义权限:Moe1,表示数据 库只读:M0dc=2,表示数据库只写:Modc=3,表示数据库可读可写。若没有设置此漏性则 表示可读可写。 误示示例6:建立与Access数据库chap5.mdh的只读连接。 2 Connection对象的常用方法 (1)Open 功能:建立与数据库的连接。贝有与数据库建立连接后才能对数据库进行查询、插入、 删除、更新等操作。 (2)Close 功能:关闭一个己经打开的Connection对象及相关子对象. 演小示例7:关闭cn指定的数据库连接。 % set con=Server.CreateObject ("ADODB.Connection") con ConnectionString="driver-=(Microsoft Access Driver (*.mdb)dbq="& Server.MapPath("chap5.mdb") con.Open “执行数据库操作 con.Close·关闭与数据床的连接 %> 注意:当一个页面关闭时,Connection对象会自动关闭,无须使用以上方法. 3)Execule 功能:执行数据库访问操作。 若执行查询操作则返可只读、仅向前的游标的Rod对象,使用以下语法格式: 赞5剪共22页
第 5 页 共 22 页 功能:指定利用 Connection 对象的 Open 方法与数据库连接的最长时间,默认为 15 秒, 设定为 0 表示无限期等待。若时间已到但无法正常连接则停止执行。 演示示例 5:将与数据库连接的时间设置为 10 秒 ⑷ Mode 功能:设置连接数据库的访问权限。Mode=0,表示没有定义权限;Mode=1,表示数据 库只读;Mode=2,表示数据库只写;Mode=3,表示数据库可读可写。若没有设置此属性则 表示可读可写。 演示示例 6:建立与 Access 数据库 chap5.mdb 的只读连接。 2 Connection 对象的常用方法 ⑴ Open 功能:建立与数据库的连接。只有与数据库建立连接后才能对数据库进行查询、插入、 删除、更新等操作。 ⑵ Close 功能:关闭一个已经打开的 Connection 对象及相关子对象。 演示示例 7:关闭 con 指定的数据库连接。 注意:当一个页面关闭时,Connection 对象会自动关闭,无须使用以上方法。 ⑶ Execute 功能:执行数据库访问操作。 若执行查询操作则返回只读、仅向前的游标的 Recordset 对象,使用以下语法格式:

Set Records对象Connetion对象.Execute(SQL字符申、表名或存储过程名): 若执行活加、副除、更新操作则使用以下语法格式:Connetion对象Execute(SQL.字符串、表 名或存储过程名)。 演示示例8:在从数据库chp5.mdb的member数据表中查询出学号为“067014350"的学生 的Email地址。 <% set con=Server.CreateObject ("ADODB.Connection") con.Open "driver=(Microsoft Access Driver (*.mdb)):dbq='&Server.MapPath("chap5.mdb") set rs=Server.CreateObject ("ADODB.Recordset") rs-con Executd"select email from memher where stuid-067014350") response.write rs("email") %3 《0 BeginTrans 功能:开始一个事务处理, 语法格式:Connetion对象.BeginTrans 注意:开始一个事务处理后,对数据库的更改并不立即执行,直到提交事务处理时才真正执 行。 何CommitTrans 功能:提交事务处理结果。 语法格式:Connetion对象.CommitTrans 注意:提交一个事务处理时,对数据库的更政才真正执行。 (6)RollbackTrans 功能:取消数据库事务处理结果,韩束当前事务处理 语法:Connelion对象.Rollback Trans 注意:执行叶深作后取消BeginTrans与RollbackTrans之间的数据库操作, 3 Error对象与Errors集合简介 Erro对象是Connection对象的子对象,一个运行错误减是一个Error对象。Errors集合 由所有的Eror对象组成,在实后应用中可以利用Ers集合的属性判断是否有带误,利用 ET对象的属性明确只体错误。 《1)Errors集合的属性 Count属性:返同Fros集合中Fror对象元素的个数. 语法:Connection对象.Errors.Count 团Errors集合的方法 ①Iem方法:建立Error对象 语法:set Error对象Connection对象Errors.Itcm(错误索引),其中索引根据错误顺序排列, 从0到Errors.Cout-l· 滴示示例9: % 剪6页共22页
第 6 页 共 22 页 Set Recordset 对象=Connetion 对象.Execute (SQL 字符串、表名或存储过程名); 若执行添加、删除、更新操作则使用以下语法格式:Connetion 对象.Execute (SQL 字符串、表 名或存储过程名) 。 演示示例 8:在从数据库 chap5.mdb 的 member 数据表中查询出学号为“067014350”的学生 的 Email 地址。 ⑷ BeginTrans 功能:开始一个事务处理。 语法格式:Connetion 对象.BeginTrans 注意:开始一个事务处理后,对数据库的更改并不立即执行,直到提交事务处理时才真正执 行。 ⑸ CommitTrans 功能:提交事务处理结果。 语法格式:Connetion 对象.CommitTrans 注意:提交一个事务处理时,对数据库的更改才真正执行。 ⑹ RollbackTrans 功能:取消数据库事务处理结果,结束当前事务处理。 语法:Connetion 对象.RollbackTrans 注意:执行此操作后取消 BeginTrans 与 RollbackTrans 之间的数据库操作。 3 Error 对象与 Errors 集合简介 Error 对象是 Connection 对象的子对象,一个运行错误就是一个 Error 对象。Errors 集合 由所有的 Error 对象组成。在实际应用中可以利用 Errors 集合的属性判断是否有错误,利用 Error 对象的属性明确具体错误。 ⑴ Errors 集合的属性 Count 属性:返回 Errors 集合中 Error 对象元素的个数。 语法:Connection 对象.Errors.Count ⑵ Errors 集合的方法 ① Item 方法:建立 Error 对象 语法:set Error 对象=Connection 对象.Errors. Item(错误索引),其中索引根据错误顺序排列, 从 0 到 Errors.Count-1。 演示示例 9: <%

set con=Server.CreateObject (ADODB.Connection") stcr=con.Errors.Item(0)‘或:set er=com.Errors(0) %2 ②Clear方法:清除Errors集合巾的所有Eror对象. 语法:Connection对象.Clear 3Err对象的常用属性 同性 说男 N山rHbr 铅误编号 Descriplion 错误描述 Source 错误原因 HelpContext 错误提示文字 HelpFile 错误提示文件 NativeError 数据库产生的原始错误 4 Connection对象与Errr对象的应用 流示示例10:利用Connection对象的Execute方法访问数据库chup5.mdb,其中数据表member 的结构如下: 字段 含义 stuid 学员的学号 sid 学员的设置的口令 name 学员的姓名 sender 学员的性别 email 学员的电子邮件地星 编写程序实现以下功能: 1从数据表member中查南出所有学员的姓名并按学号升序排列。 2向数据表mm知中添加一条记录,学号:067014371、姓名:新学员、性别:男,电子邮 f件:tjdu@163ewm 3在数常表member中更新学号为067014371的记录的姓名字段为“修政学员” 4别除数斯表member中学号为067014371的记求. cl一功能1:con execule sele4ap 数据库查前操作/title心 c% 建立Connection对象an set con-Server.CreateObject("ADODB Connection") cm.ConnectionTimeout-0'设置cn执行Open方法时连接数据库的最长时间为无限制 第7翼共22页
第 7 页 共 22 页 set con=Server.CreateObject ("ADODB.Connection") set err=con . Errors.Item(0) ‘或:set err=con . Errors (0) %> ② Clear 方法:清除 Errors 集合中的所有 Error 对象。 语法:Connection 对象. Clear ⑶ Error 对象的常用属性 属性 说明 Number 错误编号 Description 错误描述 Source 错误原因 HelpContext 错误提示文字 HelpFile 错误提示文件 NativeError 数据库产生的原始错误 4 Connection 对象与 Error 对象的应用 演示示例 10:利用 Connection 对象的 Execute 方法访问数据库 chap5.mdb,其中数据表 member 的结构如下: 字段 含义 stuid 学员的学号 sid 学员的设置的口令 name 学员的姓名 gender 学员的性别 email 学员的电子邮件地址 编写程序实现以下功能: 1 从数据表 member 中查询出所有学员的姓名并按学号升序排列。 2 向数据表 member 中添加一条记录,学号:067014371、姓名:新学员、性别:男,电子邮 件:tjddstu@163.com 3 在数据表 member 中更新学号为 067014371 的记录的姓名字段为“修改学员” 4 删除数据表 member 中学号为 067014371 的记录。 数据库查询操作 <% '建立 Connection 对象 con set con=Server.CreateObject("ADODB.Connection") con.ConnectionTimeout=0 '设置 con 执行 Open 方法时连接数据库的最长时间为无限制

cm.CommandTimeout一0设置com执行Execute方法时最长时间为无限制 连按、打开数据库 con.Open "driver=(Microsoft Access Driver (*.mdb)):dbq='&Server.MapPath("chap5.mdb") 查询试录 strSgl="select from member order by stuid' set rs=con.Execute(strSql) 输出记录的name学段值 Do While Not rs Eof Response.Write rs("name")&"cbr" rs.MoveNext Loop con.close %> chtmb chead 数据库插入操作 c一功能3:con_execule_updale asp-> chtml> 赞8剪共22页
第 8 页 共 22 页 con.CommandTimeout=0 '设置 con 执行 Execute 方法时最长时间为无限制 '连接、打开数据库 con.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("chap5.mdb") '查询记录 strSql="select * from member order by stuid" set rs=con.Execute(strSql) '输出记录的 name 字段值 Do While Not rs.Eof Response.Write rs("name") & "" rs.MoveNext Loop con.close %> 数据库插入操作

chead ctitle数据库更新操作cile> c/head chody> chead ctitle>数据库副除操作ite> c/head cbody> c% 建立Connection对象con set con=Server.CreateObject("ADODB.Connection") 连接打开数据库 con.Open "driver=(Microsoft Access Driver (*.mdb):dbq='&Server.MapPath("chap5.mdb") 剩除记录 strSql-delete from member where stuid-067014371" con Execute(strSql) con close %> c/body 滴示示例I小:在数据库chap5.mdb中有一个帐户数据表bankaccount,.包括帐号(account)、 密码(pwd)、余额(bal2nce)、交易时间(exchangedate)字段.现将帐号为12345678901234567891 剪9页共22页
第 9 页 共 22 页 数据库更新操作 数据库删除操作 演示示例 11:在数据库 chap5.mdb 中有一个帐户数据表 bankaccount,包括帐号(account)、 密码(pwd)、余额(balance)、交易时间(exchangedate)字段。现将帐号为 12345678901234567891

余额中的5000元转到帐号为12345678901234567892的余额中,并记录转帐的日期时间. 1--chap5trans.asp-- c% set con=Server.CreateObjeet("ADODB Connection") con ConnectionTimeout-0 con CommandTimeout-0 con.Open "driver-Microsoft Access Driver (+.mdb)!.dbq-'&Server MapPath("chap5 mdh") con BeginTrans sql1='update bankaccount set balance-balance-5000.exchangedate-"&now &"where aocount=-12345678901234567891m con.execute sqll sql2='update bankaccount set balance=balance+5000.exchangedate="&now &"where3o0wt=12345678901234S67892" con.execute sql2 if con errors count>0 then con.errors.clear con RollBack Trans pn买write"交易失败” else con.CommitTrans response.write"交易成功 end if con.close set con=nothing %> 5.2.2 Recordset对象及其千对象 Recordset对象又称记录果对象,表示使用Connection对象从基本表或执行查前命令后得 到的记录全集。Recordse对象所指的当前记录均为集合内的单个记录。Reod对象可以对 R©cordset对象中的每个记录集进行训览、更改等操作并在页面上显示当前记录的各个字段的 内容。 一,个记录集包含若干行记录,每条记录包含若干列字段。若记录果非空,则打开记录集 后记录指针指向第一条记录。记录集有两个特殊位置,表示记求集的首部,位于第一条记 录之前,D「表示记录集的结尾,位于最后一条记录的之后。记录集指针向下〔向尾部)移动 称为向前移动,记录集指针向上.《向首部)移动称为向后移动。 1创建Recordset对象 使用Reoordset对象之前,必须先创建它。其创建方法有以下两种: 第10页共22页
第 10 页 共 22 页 余额中的 5000 元转到帐号为 12345678901234567892 的余额中,并记录转帐的日期时间。 0 then con.errors.clear con.RollBackTrans response.write "交易失败" else con.CommitTrans response.write "交易成功" end if con.close set con=nothing %> Recordset 对象又称记录集对象,表示使用 Connection 对象从基本表或执行查询命令后得 到的记录全集。Recordset 对象所指的当前记录均为集合内的单个记录。Recordset 对象可以对 Recordset 对象中的每个记录集进行浏览、更改等操作并在页面上显示当前记录的各个字段的 内容。 一个记录集包含若干行记录,每条记录包含若干列字段。若记录集非空,则打开记录集 后记录指针指向第一条记录。记录集有两个特殊位置,bof 表示记录集的首部,位于第一条记 录之前,eof 表示记录集的结尾,位于最后一条记录的之后。记录集指针向下(向尾部)移动 称为向前移动,记录集指针向上(向首部)移动称为向后移动。 1 创建 Recordset 对象 使用 Recordset 对象之前,必须先创建它。其创建方法有以下两种: