11.1 课前导读
11.2 课堂教学
11.3 上机练习
11.4 课后作业第 11课 ASP与数据库
11.1 课前导读
1,网站数据库化
2,使用 ADO访问数据库
3,ADO的特点
4,示例数据库
11.1 课前导读作为一种既易于使用又可扩展的技术,ADO可以用于向网页添加数据库访问 。 使用 ADO编写的应用程序可以存取在 Internet上任何地方的资源,例如,你可以在家里通过浏览器填写购物单,去购买远在千里之外的物品 。
1,网站数据库化将网站数据库化,就是使用数据库来管理整个网站 。 只要更新数据库的内容,网站的内容就会被自动更新 。 将网站数据库化的好处如下:
① 可以自动更新网页 。 采用数据库管理,只要更新数据库的数据,网页内容就会自动得到更新,过期的网页也可以被自动拿掉 。
② 加强搜寻功能 。 将网站的内容储存在数据库中,可以利用数据库提供的强大搜寻功能,从多个方面搜寻网站的数据 。
③ 可以实现各种基于 Web数据库的应用 。 使用者只要使用浏览器,就可以通过 Internet或 Intranet内部网络,存取 Web数据库的数据 。 可以使用在学校教学,医院,商业,银行,股市,运输旅游等各种应用上 。 例如银行余额查询,在线购书,在线查询,在线预定机票,在线医院预约挂号,在线电话费查询,在线股市买卖交易,在线学校注册选课,以及在线择友等 。
2,使用 ADO访问数据库目前,Microsoft对应用程序访问各种各样的数据源所使用的方法是 OLE DB,OLE DB是一套组件对象模型 ( COM) 接口,但它是相当复杂的 。 连接应用程序与
OLE DB的桥梁就是 ADO。
可以使用 ADO编写简洁和可扩展的脚本,连接到与
OLE DB兼容的数据源,如数据库,电子表格,顺序数据文件或电子邮件目录 。 使用 ADO的对象模型,可以轻松地 ( 使用 VBScript或 JScript等脚本语言 ) 访问这些接口,并将数据库功能添加到您的 Web应用程序中 。 另外,还可以使用 ADO访问与开放式数据库互连 ( ODBC)
兼容的数据库 。
ADO可以使用 VBScript,JavaScript脚本语言来控制数据库的存取以及输出查询结果 。
3,ADO的特点
ADO可以用来建造客户 /服务器结构及 Web的应用,
它具有以下的特点:
① 支持批处理 (Batch Updating),可以分批处理客户端提出的请求 。
② 支持存储过程 (Stored Procedures),可使用
in/out参数给存储过程输入及输出值,
并可以取得存储过程的返回值 。
③ 可以使用存储过程或批处理 SQL指令,传回多组记录集的功能 。
4,示例数据库虽然可以使用多种数据库系统来从事 ASP网页数据库的设计,但是由于 Microsoft Access 属于
Microsoft Office家族,取得较为容易,且界面与
Office家族一致,使用容 易,因此本教 程采用
Microsoft Access进行网页数据库的设计 。
本课的示例数据库文件 rsgl.mdb中包含的,职工工资,表的结构见表 11-1。
表 11-1,职工工资,表的结构字段名称 类型 必填 字段长度 索引部门 文本( Text) 是 6
编号 文本( Text) 是 6 主索引姓名 文本( Text) 是 8
基本工资 货币( Currency) 否岗位津贴 货币( Currency) 否职务补贴 货币( Currency) 否奖金 货币( Currency) 否房租 货币( Currency) 否水电 货币( Currency) 否实发工资 货币( Currency) 否
11.2 课堂教学
11.2.1 ADO的概念
11.2.2 访问数据库
11.2.1 ADO的概念
1,ADO对象模型
2,Connection对象
3,Command对象
4,Recordset对象
1,ADO对象模型
ADO对象模型包括 7个对象和 3个集合,如图 11-1所示 。 其中对象及集合的说明见表 11-1。
表 11-1 ADO对象描述对象 描述
Connection(连接对象) 用来建立数据源和 ADO程序之间的连接
Command(命令对象) 用来嵌入 SQL查询,包括对存储过程的调用
Parameter(参数对象) 用来传递参数给 SQL查询,在使用存储过程时用到
Recordset(记录集对象) 用来浏览及操作实际数据库内的数据,这是非常重要的一个对象
Field(字段对象) 用来取得一个记录集 (Recordset)内不同字段的值
Error(错误对象) 用来返回一个数据库连接 (Connection)上的错误
Property(属性对象) 指明一个 ADO对象的属性表 11-2 ADO集合描述集合 描述
Errors 所有的 Error对象集合。这个集合用来响应一个连接 (Connection)
上的单一错误
Parameters 所有的 Parameter对象集合。这个集合关联着一个 Command对象
Fields 所有的字段对象集合。这个集合关联着一个 Recordset对象的所有字段
Properties 所有的 Property对象集合。这个集合关联着 Connection,Command、
Recordset或者 Field对象说明:在 ADO对象模型中最为重要的对象是三个一般对象,Connection对象,Command对象和 Recordset
对象,通过这三个对象,可以方便地建立数据库连接,
执行 SQL查询及存取查询的的结果 。
Connection
Recordset
Command
Errors
Fields Field
Prameters Prameters
Error
图 11-1 ADO对象模型
2,Connection对象
ASP使用 ADO对各种数据源进行各种操作,其中,
Connection对象是必不可少的,Connection对象可以用来在应用程序和数据库中建立一条数据传输连线,
在这个基础之上可以使用 Command对象及 Recordse对象来对 Connection对象所连接的数据库进行插入删除,
更新和查询等操作 。 同拨打电话一样,建立一个
Connection 对 象 就 像 是 拿 起 话 筒,打开一个
Connection对象类似于拨号,而使用 Command对象及
Recordse对象已经是在用这条线路通话了 。
Connection对象的常用属性见表 11-3。
表 11-3 Connection对象的常用属性属性 意义描述
CommandTimeout
定义了使用 Execute方法运行一条 SQL命令的最长时限,
才能够中断并产生错误。默认值为 30秒 (设定为 0表示没有限制 )
ConnectionString 设定连接数据源的信息,包括 FileName,Password、Userld,DataSource,Provider等参数
ConnectionTimeout 定义了使用 open方法连接数据源的最长等待时间,默认值为 15秒 (设定为 0时表示没有限制 )
DefaultDatabase 定义连接的默认数据库
Mode 建立连接之前,设定连接的读写方式,决定是否可更改目前数据。 0-不设定(默认),1-只读,2-只写,3-读写
Provider 设置连接的数据提供者 (数据库管理程序 ),默认值是MSDASQL(Microsot~ODBC For OLEDB)
State 读取当前链接对象的状态,取 0表示关闭,1表示打开
Connection对象的常用方法见表 11-4。
表 11-4 Connection对象的方法及描述方法 意义描述
Open 建立一个与数据源的连接对象
Close 关闭与数据源的连接,并且释放与连接有关的系统资源
Execute 执行 SQL命令或存储过程,以实现与数据库的通讯
BeginTrans 开始一个新的事务,即在内存中为事务开辟一片内存缓冲区
CommitTrans 提交事务,即把一次事务中所有变动的数据从内存缓冲区一次性地写入硬盘,结束当前事务并可能开始一个新的事务
RollbackTrans 回滚事务,即取消开始此次事务以来对数据源的所有操作,并结束本次事务操作下面对部分方法进行详细说明 。
① Open方法:建立一个与数据源的连接对象,打开与数据源的连接 。 其语法格式为:
Connobject.Open connectionstring,UserId,
Password
其中,Connectstring为可选参数,它是一个字符串变量,包含链接的信息 。 用法参见 Conectionstring
属性 。
UserId为可选参数,它是一个字符串变量,包含建立连接时访问数据库使用的用户名称 。
Password为可选参数,它是一个字符串变量,包含建立连接时访问数据库使用的密码 。
② Close方法:关闭与数据源的连接,并且释放与连接有关的系统资源 。 其语法格式为:
Connobject.close
其中,Connobject为已经创建的 Connection对象 。
使用 Close方法关闭 Connection对象,但没有从内存中删除该对象 。 因此一个关闭的 connection对象还可以用 open 方 法 打 开 而 不 必 再 次 创 建 一 个
connection对象 。 此外,在使用 close方法关闭连接时,也将关闭以此连接相关的所有活动的 recoordset
对象 。 但是,与此连接相关的 command对象将不受影响,只不过 command对象不再参与这个连接 。
为了释放 connection对象所占用的所有资源,可以用下面的方法:
Set Connobject = nothing
③ Execute方法:执行 SQL命令或存储过程,以实现与数据库的通讯 。 其语法为:
有返回记录的格式:
Set Rs = Connobject.Execute(CommandText,
ReccordAffected,Options)
无返回记录的格式:
Connobject.Execute CommandText,
ReccordAffected,Options
其中,Rs为创建的 Recordsed对象; Connobject为已经创建的 Connection对象 。
CommandType是一个字符串,它包含一个表名,
或某个将被执行的 SQL语句; ReccordAffected为可选参数,返回此次操作所影响的记录数 。 Options为可选参数,用来指定参数的 CommandText参数的性质,
即用来指定 ADO如何解释 CommandText参数的参数值,
其取值与意义见表 11-5。
表 11-5 Options参数的取值及意义值 意义描述
1 表示被执行的字符串包含一个命令文本
2 表示被执行的字符串包含一个表名
4 表示被执行的字符串包含一个存储过程名
8 没有指定字符串的内容 (这是默认值 )
3,Command对象
Command对象用来定义数据库的查询动作,这个查询一般采用 SQL语句,大部分数据库都会支持 SQL语言解释 。 通过和 SQL Server的查询及存储过程的良好结合,Command对象有更强大的数据库访问能力,无论是对数据库的插入,更新和删除这类无需返回结果集的操作,还是对 Select查询这样需返回结果集的操作都一样简单 。
Command对象的常用属性见表 11-6。
表 11-6 Command对象的属性属性 意义描述
ActiveConnection 定义了 Command对象的连接信息,用来指定当前的Command对象的操作对象是哪个 Connection对象
CommandText
定义传送给数据提供者的命令文本。它被用来设定或返回一个字符串,该字符串包含一个 SQL命令、一个表名或一个存储过程名。默认值为空字符串
CommandType 指示 CommandTem属性中设定的“命令字符串”的类型
CommandTimeout 用来设定等候运行一条命令的最长等待时间,超过该时间命令对象中止并产生一个错误。设定为 0时表示无限期等待
Name 用来设置和读取一个 Command对象的名字
Prepared 该属性指示在命令被执行前是否要用命令创建一个预备语句
State 用来设置或读取当前 Command对象的状态是打开的或关闭的说明,CommandType属性指示 CammandText属性中设定的,命令字符串,的类型,即用来指 ADO如何解释 CammandText参数的参数值,它的取值与意义与表
11-5中 Options参数的取值及意义相同 。
Command对象的常用方法有 Execute方法,用来运行 CommandText属性所设定的 SQL查询,SQL说明命令或存储过程,以实现与数据库的通讯 。 其语法为:
有返回记录的格式:
Set Rs = Comm,Execute(RecordsAffected,
Parameters,Options)
无返回记录的格式:
Comm.Execute RecordsAfiected.
Parameters,Options
其中,Rs为创建的 Recordsed对象; Comm为已经创建的 Command对象 。
RecordAfiected为可选参数,返回此次操作所影响的记录数 。 Parameters为可选参数,表示一个 SQL
语句的参数集合 。 Options为可选参数,用来指定 ADO
如何解释 CommandText参数的参数值,它的取值与意义与表 11-5中 Options参数的取值及意义相同 。
4,Recordset对象
Recordset对象对应着 Command对象的查询返回结果,或者是直接建立的一个带查询的结果集 。 它把从数据库内查询到的结果封装在一起,并提供简单快捷的方式去访问每一条记录内每一字段的数据,在后面的章节我们会详细去了解这些方式 。
Recordset对象实际上是依附于 Connection对象和
Command对象之上的 。 通过建立及开启一个 Connection
对象,可以与我们关心的数据库建立连线;通过使用
Command对象,则可以告诉数据库我们想要做什么:是插入一条记录,还是查找符合条件的记录;通过使用
Recordset对象,则可以方便自如地操作 Command对象返回的结果 。 这三个对象中的每 — 个都是必要的,缺一不可 。
(1) Recordset对象的属性
Recordset对象的常用属性见表 11-7。
表 11-7 Recordset对象的常用属性属性 意义描述
ActiveConnection 定义了与数据提供者的连接信息,用来指定当前的RecordSet对象属于哪个 Connection对象
Source 指示 RecordSet对象的数据源,可以是一个 command对象名、SQL语句、数据库表或存储过程
CursorType 指定 RecordSet对象所使用的光标类型
LockType 表示编辑时记录的锁定类型
Filter 用来设定一个过滤条件,以便对 RecordSet记录进行过滤
CacheSize 表示一个 RecordSet对象在高速缓存中的记录数
Maxrecords 执行一个 SQL查询时,返回 RecordSet对象的最大记录数
Bof 判断记录指针是否到了第一条记录之前
Eof 判断记录指针是否到了最后一条记录之后
RecordCount
返回 RecordSet对象的记录数 (在使用键盘光标时,该属性返回的可能是不太准确的数值;一般情况下,并不用这种方法来统计 RecordSet中的记录数,因为它的性能并不稳定 )
Bookmark 书签标记,用来保存存当前记录的位置
AbsolutePosition 用来设定 RecordSet对象中当前记录的顺序位置是第几行记录
PageSize 表示 RecordSet对象的页面大小 (每页多少条记录 ),默认值为10
PageCount 表示 RecordSet对象的页面个数
AbsolutePage 表示当前记录的页号
EditMode 指示当前记录的编辑状态,0 – 已被编辑; 1 – 已被修改而未提交; 2 – 存入数据库的新记录
Status 对 RecordSet对象进行批量更新后,查询当前记录的状态说明:
① CursorType属性指定 RecordSet对象所使用的光标类型 。 不同的光标类型决定了对 RecordSet所能做的操作 。 共有四种光标类型,0 - 前滚光标
(ForwardOnlyCursor),光标只能向前移动,执行效率高,是 Cursor 的 默 认 值 ; 1 - 键盘光标
(KeysetCursor),光标可向前向后移动,RecordSet
记录集同步反映自它创建后其他用户所作的修改和删除,但却不能同步反映自它创建后其他用户新增加的记录; 2 - 动态光标 (DynamicCursor),光标可向前向后移动,任何时候 RecordSet记录集都同步反映其他用户的任何操作; 3 - 静态光标 (StaticCursor),
光标可向前向后移动,自创建后无法同步反映其他用户所做的任何操作,它的功能简单但消耗资源少 。
② LockType属性表示编辑时记录的锁定类型 。
它决定了当不止一个用户试图同时改变一个记录时,
RecordSet如何处理数据记录 。 它的取值有,0 - 只读锁定,记 录 只 读,不 能 更 新 RecordSet,为
LockType的默认值; 1 - 悲观锁定,编辑记录开始立刻锁定,直到提交给数据提供者; 2 - 乐观锁定,一次锁定一条记录,只有调用 Update方法提交数据时才锁定记录; 3 - 乐观的批量更新,允许同时更新多条记录 。
③ Filter属性用来设定一个过滤条件,以便对
RecordSet记录进行过滤 。 使用的优点是可以在已经存在的 RecordSet对象上进一步过滤出所需的记录 。
但这种方式增加了系统的开销 。 它有两种使用方式:
方式 1:使用关系表达式,例如:
Rs.Filter = "bh" > 30
其中 Rs是 已 经创 建的 RecordSet对象 ; bh是
RecordSet对象的字段 ( 数值型 ) 。
方式 2:使用准则常量,0 - 清除以前的 Filter,
允许看见所有记录; 1 - 只允许查看已修改但未提交的记录; 2 - 允许查看最后删除,Resync,批量更新,
或删除批量方式所影响的记录; 3 - 允许查看数据库最后读取结果的数据 。 例如:
Rs.Filter = 1
可以实现更新整个批量记录之前只显示用户修改的记录,使用户在提交数据之前能够进行检查 。
④ BookMark属性用来存储当前记录的位置 。 并非每一个数据提供者都支持这个属性 。 当创建一个允许使用 BookMark属性的 RecordSet对象时,给每个记录都标上一个独一无二的 BookMark,利用 BookMark可以返回访问过的记录 。
⑤ Status属性对于多用户连接管理特别有用,
通过该属性可以看出更新记录的失败原因 。 它的返回值和意义如表 11-8所示 。
表 11-8 Status属性的值和意义值 意义描述 值 意义描述
0 记录更新成功 1024 存在记录锁定,新记录未保存
l 新纪录 2048 使用乐观并发事件,未保存
2 记录被修改 4096 用户违反完整性规则,未保存
4 记录被删除 8192 很多待定修改,记录未保存
8 记录未被修改 16384 与一存储对象相冲突,未保存
16 书签不合法,记录未保存 32768 内存不够,记录未保存
64 影响多个记录,未保存 65536 用户没有足够权限,未保存
128 指向一待定插入,记录未保存
131072 违反基本数据库原理,未保存
256 操作被取消,记录未保存 262144 记录已从数据源删除
(2) RecordSet对象的方法
RecordSet对象的方法及意义见表 11-9。
表 11-9 RecordSet对象的方法及意义方法 意义描述
Open 打开一个 RecordSet对象
Close 关闭一个 RecordSet对象并释放相关的资源.
Clone 创建一个 RecordSet对象的完全拷贝,但只有所用的 RecordSet对象类型允许使用 BookMarks时才能使用该方法
MoveFirst 把 RecordSet指针指向第一行记录
MoveLast 把 RecordSet指针指向最后一条记录 (该 RecordSet必须支持书签 )
MovePrevious 把 RecordSet指针上移一行 (使用前应判断 BOF是否为真;该RecordSet必须支持书签 )
Movenext 把 RecordSet指针下移一行 (使用前应判断 EOF是否为真 )
Move 把 RecordSet指针指向指定的记录
GetPows 从一个 RecordSet对象读取一行或多行记录到一个数组中
NextRecordSet
清除当前的 RecordSet并执行下一条指令,以传回下一个
RecordSet对象,如果没有下一条指令则返回 Nothing给
RecordSet
Requery 重新执行的 SQL查询操作,以更新 RecordSet对象中的数据
Resync 从数据源更新当前的 RecordSet记录,实现与数据源的同步
Addnew 增加一条空纪录
Delete 删除当前记录
Update 保存当前记录的任何变动
CancelUpdate 取消前一个 Update方法所做的一切修改
UpdateBatch RecordSet工作在批量方式时,取消对 RecordSet的更新
Suports 获取创建的 RecordSet对象的能力信息说明:
① Open方法:打开一个 RecordSet对象 。 其语法格式为:
Rs.Open[Source][,ActiveConnection]
[,CursorType][,LockType][,Option]
其中,Rs为已经创建的 RecordSet对象; Source为可选参数,可以是一个 Command对象名,SQL字符串存储过程 或数 据库 的表 名; ActiveConnection参见
ActiveConnection属性; CursorType是 RecordSet对象所使用的光标类型,用法参见 CursorType属性;
LockTypec是编辑 RecordSet对象记录时所使用的锁定类型,用法参见 LockType属性; Options指示数据提供者如何处理 Source的内容类型,它的取值与意义见表
11-5。
② 使用 Close方法关闭 RecordSet对象,并不从内存中删除该对象,只是无法读取其中的数据,但仍然可以读取它的属性 。 因此一个关闭的 ReccordSet对象还可以用 Open方法打开并保持其原有属性 。 如果正在进行编辑更新数据的操作,在调用 Close方法前必须先调用 Update或 CancelUpdate方法,否则将会出现错误 。 如果以批量模式更新数据记录 (Reccordset的
LockType属性设为 3),那么对缓冲区数据的修改将全部丢失 。 另外,使用 Clone方法复制一个已经打开的
RecordSet对象,调用 Close方法不影响任何复制的
RecordSet对象 。
用下面的命令可以释放 RecordSet对象所占用的所有资源:
set Rs = nothing
③ Move方法用于把记录指针指向指定的记录 。
其语法格式为:
Move n [,start]
其中 n为要移动的记录数,取正时表示向前 (下 )
移动,取负时表示向后 (上 )移动; start是可选参数,
表示移动的起点 。
④ 使用 Move,MoveFirst,MoveLast,
MovePrevious,MoveNext方法移动记录指针时,需要注意 RecordSet对象的光标类型 。 如,前滚光标,限制了记录指针只能向前移动 。
⑤ GetRows方法从一个 RecordSet对象读取一行或多行记录到一个数组中,一般用来读取大量的数据 。
其语法格式为:
Myarray = Rs.GetRows(rows,start,fields)
其中 Myarray为目标数组名; Rs为已经创建的
RecordSet对象; Rows为返回数组的行数; start为读取数据的起点 (书签 ); Fields为 RecordSet的字段 。
⑥ AddNew方法用于增加一条空纪录 。 调用该方法时在 RecordSet对象中增加一个新行,并将指针移到行首以准备保存新数据 。 该方法一般和 Update方法相搭配共同完成数据更新的任务 。 不过这种方法很消耗资源,效率最低,最好用 SQL语句来实现数据更新 。
⑦ Delete方法用于删除当前记录 。 当 RecordSet
工作在批量方式时,可实现批量删除 。 不过该方法非常消耗系统资源,效率非常低 。 其语法格式为:
Delete [value]
其中 value = 1( 默认值 ) 表示该方法只删除当前记录; value = 2表示该方法删除所有由 Filter属性设定的记录 。
11.2.2 访问数据库
1,连接到数据源
2,使用 Recordset对象处理结果
1,连接到数据源
(1) 创建连接字符串创建 Web数据应用程序的第一步是为 ADO提供一种定位并标识数据源的方法 。 这一步通过,连接字符串,
实现 。 连接字符串是一系列用分号分隔的参数,用于定义诸如数据源提供程序和数据源位置等参数 。 ADO
使用连接字符串标识 OLE DB提供程序并将提供程序指向数据源 。 提供程序是一个组件,用来描述数据源并以行集合的形式将信息展示给应用程序 。
表 11-10列出了几种通用数据源的 OLE DB连接字符串 。
表 11-10 常用的通用数据源的 OLE DB连接字符串数据源 OLE DB连接字符串
Microsoft Access Provider=Microsoft.Jet.OLEDB.4.0;Source=指向,mdb文件的物理路径
Microsoft SQL
Server
Provider=SQLOLEDB.1;Source=指向服务器上数据库的路径
Oracle Provider=MSDAORA.1;Source=指向服务器上数据库的路径
Microsoft Indexing
Service
Provider=MSIDXS.1;Source=指向文件的路径为了向后兼容性,ODBC的 OLE DB提供程序支持
ODBC连接字符串语法 。 表 11-11列出了常用的 ODBC连接字符串 。
表 11-11 常用的 ODBC连接字符串数据源驱动程序 ODBC连接字符串
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=指向,mdb文件的物理路径
SQL Serverr Driver={SQL Server};SERVER=指向服务器的路径
Oracle Driver={Microsoft ODBC for Oracle};SERVER=指向服务器的路径
Microsoft Excel Driver={Microsoft Excel Driver (*.xls)};DBQ=指向,xls文件的物理路径 ; DriverID =278
Microsoft Excel 97 Driver={Microsoft Excel Driver (*.xls)};DBQ=指向,xls文件的物理路径 ;DriverID=790
Paradox Driver={Microsoft Paradox Driver (*.db)};DBQ=指向,db文件的物理路径 ; DriverID=26
文本 Driver={Microsoft Text Driver (*.txt;*.csv)}; DefaultDir=指向,txt文件的物理路径
Microsoft Visual
FoxPro?(带有一个数据库容器)
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBC;SourceDb=指向,dbc文件的物理路径
Microsoft Visual
FoxPro(不带数据库容器)
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBF;SourceDb=指向,dbf文件的物理路径
(2) 连接到数据源
ADO提供的 Connection对象,用于建立和管理应用程序与 OLE DB兼容数据源或 ODBC兼容数据库之间的连接 。 Connection对象的属性和方法可以用来打开和关闭数据库连接,并发布对更新信息的查询 。
要建立数据库连接,首先必须创建 Connection对象实例 。 下述代码创建 Connection对象实例,接着打开一个连接:
' 创建 connection对象
Set conn = Server.CreateObject("ADODB.Connection")
' 使用 OLE DB连接字符串打开连接
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source
=C:\MarketData\rsgl.mdb"
或
' 创建 connection对象
set conn=server.createobject("adodb.Connection")
' 创建 OLE DB连接字符串
CS="Provider=Microsoft.jet.OLEDB.4.0;Data Source="
conn.ConnectionString=CS & Server.MapPath("rsgl.mdb")
' 打开连接
conn.Open
说明:
① 连接字符串在等号 (=)的左右不包含空格 。
② 在上例中,Connection对象的 Open方法将引用连接字符串 。
2,使用 Recordset对象处理结果建立了连接对象 Connection,并打开了数据库连接后,就可以使用 Recordset对象存取表中的记录 。
要使用 Recordset对象处理结果,首先必须创建
Recordset对象实例 。 下述代码创建 Recordset对象实例,并打开 Recordset对象:
' 创建 Recordset对象
Set RS=Server.CreateObject("adodb.recordset")
' 打开 Recordset对象
RS.Open "职工工资 ",conn,2,3,2
打开 Recordset对象后,就可以读取,插入,删除和更新其中的记录 。 下面通过一个综合使用
Recordset对象属性和方法的例子来说明记录集
Recordset对象的应用 。
【 例 11-1】 综合使用 Recordset对象的属性与方法,
建立一个工资管理网页应用程序,如图 11-1所示 。
工资管理网页应用程序包括 6个 asp文件,它们分别是:
① Main.asp:工资管理网页主框架,包括两个框架 。 上方框架为控制菜单,下方框架为数据显示,操作区域 。
② Menu.asp:上方框架的来源网页,用以控制各种数据操作 。
③ List1.asp:记录显示页面 。
④ List2.asp:记录修改页面,用以修改指定记录数据 。
⑤ List3.asp:记录增加页面,用以增加新记录 。
⑥ List4.asp:记录删除页面,用以删除指定记录 。
(1) 主框架网页主框架 网页 Main.asp的代码如下:
<HTML>
<FRAMESET ROWS="100,*" BORDER="0">
<FRAME NAME="Top" NORESIZE SCROLLING="No" SRC="Menu.asp">
<FRAME NAME="Bottom" NORESIZE SRC="list1.asp">
</FRAMSET>
</HTML>
说明:下方框架的名称为,Bottom”,各个记录操作网页都将在此打开 。
(2) 控制菜单网页控制菜单网页 Menu.asp是上方框架的来源网页 。 其代码 。
说明:以超级链接作为控制菜单,前 4个链接以不同的参数连接网页 List1.asp,后 3个链接分别连接 3个不同的网页文件 。
(3) 记录显示记录显示网页 List1.asp显示记录集 Recordset对象的单条记录,其 代码 。
说明:
① 记录集 Recordset对象的 AbsolutePosition属性设置或返回当前记录号 。
② fields.count表示记录集中字段的个数;
fields(i).name 属 性 表 示 第 i+1 个 字 段 的 名 称 ;
fields(i).value属性则表示当前记录第 i+1个字段的值 。
③ 应及时使用 Connection对象和 Recordset对象的 Close方法关闭数据库连接,并释放对象所占用的内存空间 。
(4) 记录修改修改数据需要用到 Recordset对象的 Update方法 。
记录修改网页 List2.asp以文本框的形式显示待修改的记录,提交按钮 ( 确定修改 ) 用以提交修改内容,其代码 。
说明:
① 当文本框中的内容改变时,事件代码自动计算
,实发工资,。
② ShowPage过程同时包括记录数据的更新功能 。
(5) 记录增加记录增加页面 List3.asp用以增加新记录,其中代码用到 Recordset对象的 AddNew方法 。 代码 。
(6) 记录删除删除数据需要用到 Recordset对象的 Delete方法 。
记录删除网页 List4.asp的 代码 。
11.3 上机练习打开 Recordset对象后,记录指针 ( 也称,光标,)
指向首记录 。 要读取其他的记录,需要用到 Recordset
对象的属性和 Move方法 。
【 练习 11-1】 打开数据库 rsgl.mdb,将其中,职工工资,表记录分页列表 显示,如图 11-3所示 。
图 11-3 分页列表显示说明:
① 将文件以 list5.asp为文件名存盘 。
② Recordset对象的 PageSize属性表示分页大小;
PageCount表示页面数; AbsolutePage属性表示当前页号 。
③ 代码中使用 Recordset对象 MoveNext方法,将指针移向下一条记录 。
④ 代码显示 。
【 练习 11-2】 修改记录的网页 。
程序代码,运行结果 。
说明:
① 将文件以 list6.asp为文件名存盘 。
② 本练习综合了超级链接和提交按钮的使用 。
11.2 课堂教学
11.3 上机练习
11.4 课后作业第 11课 ASP与数据库
11.1 课前导读
1,网站数据库化
2,使用 ADO访问数据库
3,ADO的特点
4,示例数据库
11.1 课前导读作为一种既易于使用又可扩展的技术,ADO可以用于向网页添加数据库访问 。 使用 ADO编写的应用程序可以存取在 Internet上任何地方的资源,例如,你可以在家里通过浏览器填写购物单,去购买远在千里之外的物品 。
1,网站数据库化将网站数据库化,就是使用数据库来管理整个网站 。 只要更新数据库的内容,网站的内容就会被自动更新 。 将网站数据库化的好处如下:
① 可以自动更新网页 。 采用数据库管理,只要更新数据库的数据,网页内容就会自动得到更新,过期的网页也可以被自动拿掉 。
② 加强搜寻功能 。 将网站的内容储存在数据库中,可以利用数据库提供的强大搜寻功能,从多个方面搜寻网站的数据 。
③ 可以实现各种基于 Web数据库的应用 。 使用者只要使用浏览器,就可以通过 Internet或 Intranet内部网络,存取 Web数据库的数据 。 可以使用在学校教学,医院,商业,银行,股市,运输旅游等各种应用上 。 例如银行余额查询,在线购书,在线查询,在线预定机票,在线医院预约挂号,在线电话费查询,在线股市买卖交易,在线学校注册选课,以及在线择友等 。
2,使用 ADO访问数据库目前,Microsoft对应用程序访问各种各样的数据源所使用的方法是 OLE DB,OLE DB是一套组件对象模型 ( COM) 接口,但它是相当复杂的 。 连接应用程序与
OLE DB的桥梁就是 ADO。
可以使用 ADO编写简洁和可扩展的脚本,连接到与
OLE DB兼容的数据源,如数据库,电子表格,顺序数据文件或电子邮件目录 。 使用 ADO的对象模型,可以轻松地 ( 使用 VBScript或 JScript等脚本语言 ) 访问这些接口,并将数据库功能添加到您的 Web应用程序中 。 另外,还可以使用 ADO访问与开放式数据库互连 ( ODBC)
兼容的数据库 。
ADO可以使用 VBScript,JavaScript脚本语言来控制数据库的存取以及输出查询结果 。
3,ADO的特点
ADO可以用来建造客户 /服务器结构及 Web的应用,
它具有以下的特点:
① 支持批处理 (Batch Updating),可以分批处理客户端提出的请求 。
② 支持存储过程 (Stored Procedures),可使用
in/out参数给存储过程输入及输出值,
并可以取得存储过程的返回值 。
③ 可以使用存储过程或批处理 SQL指令,传回多组记录集的功能 。
4,示例数据库虽然可以使用多种数据库系统来从事 ASP网页数据库的设计,但是由于 Microsoft Access 属于
Microsoft Office家族,取得较为容易,且界面与
Office家族一致,使用容 易,因此本教 程采用
Microsoft Access进行网页数据库的设计 。
本课的示例数据库文件 rsgl.mdb中包含的,职工工资,表的结构见表 11-1。
表 11-1,职工工资,表的结构字段名称 类型 必填 字段长度 索引部门 文本( Text) 是 6
编号 文本( Text) 是 6 主索引姓名 文本( Text) 是 8
基本工资 货币( Currency) 否岗位津贴 货币( Currency) 否职务补贴 货币( Currency) 否奖金 货币( Currency) 否房租 货币( Currency) 否水电 货币( Currency) 否实发工资 货币( Currency) 否
11.2 课堂教学
11.2.1 ADO的概念
11.2.2 访问数据库
11.2.1 ADO的概念
1,ADO对象模型
2,Connection对象
3,Command对象
4,Recordset对象
1,ADO对象模型
ADO对象模型包括 7个对象和 3个集合,如图 11-1所示 。 其中对象及集合的说明见表 11-1。
表 11-1 ADO对象描述对象 描述
Connection(连接对象) 用来建立数据源和 ADO程序之间的连接
Command(命令对象) 用来嵌入 SQL查询,包括对存储过程的调用
Parameter(参数对象) 用来传递参数给 SQL查询,在使用存储过程时用到
Recordset(记录集对象) 用来浏览及操作实际数据库内的数据,这是非常重要的一个对象
Field(字段对象) 用来取得一个记录集 (Recordset)内不同字段的值
Error(错误对象) 用来返回一个数据库连接 (Connection)上的错误
Property(属性对象) 指明一个 ADO对象的属性表 11-2 ADO集合描述集合 描述
Errors 所有的 Error对象集合。这个集合用来响应一个连接 (Connection)
上的单一错误
Parameters 所有的 Parameter对象集合。这个集合关联着一个 Command对象
Fields 所有的字段对象集合。这个集合关联着一个 Recordset对象的所有字段
Properties 所有的 Property对象集合。这个集合关联着 Connection,Command、
Recordset或者 Field对象说明:在 ADO对象模型中最为重要的对象是三个一般对象,Connection对象,Command对象和 Recordset
对象,通过这三个对象,可以方便地建立数据库连接,
执行 SQL查询及存取查询的的结果 。
Connection
Recordset
Command
Errors
Fields Field
Prameters Prameters
Error
图 11-1 ADO对象模型
2,Connection对象
ASP使用 ADO对各种数据源进行各种操作,其中,
Connection对象是必不可少的,Connection对象可以用来在应用程序和数据库中建立一条数据传输连线,
在这个基础之上可以使用 Command对象及 Recordse对象来对 Connection对象所连接的数据库进行插入删除,
更新和查询等操作 。 同拨打电话一样,建立一个
Connection 对 象 就 像 是 拿 起 话 筒,打开一个
Connection对象类似于拨号,而使用 Command对象及
Recordse对象已经是在用这条线路通话了 。
Connection对象的常用属性见表 11-3。
表 11-3 Connection对象的常用属性属性 意义描述
CommandTimeout
定义了使用 Execute方法运行一条 SQL命令的最长时限,
才能够中断并产生错误。默认值为 30秒 (设定为 0表示没有限制 )
ConnectionString 设定连接数据源的信息,包括 FileName,Password、Userld,DataSource,Provider等参数
ConnectionTimeout 定义了使用 open方法连接数据源的最长等待时间,默认值为 15秒 (设定为 0时表示没有限制 )
DefaultDatabase 定义连接的默认数据库
Mode 建立连接之前,设定连接的读写方式,决定是否可更改目前数据。 0-不设定(默认),1-只读,2-只写,3-读写
Provider 设置连接的数据提供者 (数据库管理程序 ),默认值是MSDASQL(Microsot~ODBC For OLEDB)
State 读取当前链接对象的状态,取 0表示关闭,1表示打开
Connection对象的常用方法见表 11-4。
表 11-4 Connection对象的方法及描述方法 意义描述
Open 建立一个与数据源的连接对象
Close 关闭与数据源的连接,并且释放与连接有关的系统资源
Execute 执行 SQL命令或存储过程,以实现与数据库的通讯
BeginTrans 开始一个新的事务,即在内存中为事务开辟一片内存缓冲区
CommitTrans 提交事务,即把一次事务中所有变动的数据从内存缓冲区一次性地写入硬盘,结束当前事务并可能开始一个新的事务
RollbackTrans 回滚事务,即取消开始此次事务以来对数据源的所有操作,并结束本次事务操作下面对部分方法进行详细说明 。
① Open方法:建立一个与数据源的连接对象,打开与数据源的连接 。 其语法格式为:
Connobject.Open connectionstring,UserId,
Password
其中,Connectstring为可选参数,它是一个字符串变量,包含链接的信息 。 用法参见 Conectionstring
属性 。
UserId为可选参数,它是一个字符串变量,包含建立连接时访问数据库使用的用户名称 。
Password为可选参数,它是一个字符串变量,包含建立连接时访问数据库使用的密码 。
② Close方法:关闭与数据源的连接,并且释放与连接有关的系统资源 。 其语法格式为:
Connobject.close
其中,Connobject为已经创建的 Connection对象 。
使用 Close方法关闭 Connection对象,但没有从内存中删除该对象 。 因此一个关闭的 connection对象还可以用 open 方 法 打 开 而 不 必 再 次 创 建 一 个
connection对象 。 此外,在使用 close方法关闭连接时,也将关闭以此连接相关的所有活动的 recoordset
对象 。 但是,与此连接相关的 command对象将不受影响,只不过 command对象不再参与这个连接 。
为了释放 connection对象所占用的所有资源,可以用下面的方法:
Set Connobject = nothing
③ Execute方法:执行 SQL命令或存储过程,以实现与数据库的通讯 。 其语法为:
有返回记录的格式:
Set Rs = Connobject.Execute(CommandText,
ReccordAffected,Options)
无返回记录的格式:
Connobject.Execute CommandText,
ReccordAffected,Options
其中,Rs为创建的 Recordsed对象; Connobject为已经创建的 Connection对象 。
CommandType是一个字符串,它包含一个表名,
或某个将被执行的 SQL语句; ReccordAffected为可选参数,返回此次操作所影响的记录数 。 Options为可选参数,用来指定参数的 CommandText参数的性质,
即用来指定 ADO如何解释 CommandText参数的参数值,
其取值与意义见表 11-5。
表 11-5 Options参数的取值及意义值 意义描述
1 表示被执行的字符串包含一个命令文本
2 表示被执行的字符串包含一个表名
4 表示被执行的字符串包含一个存储过程名
8 没有指定字符串的内容 (这是默认值 )
3,Command对象
Command对象用来定义数据库的查询动作,这个查询一般采用 SQL语句,大部分数据库都会支持 SQL语言解释 。 通过和 SQL Server的查询及存储过程的良好结合,Command对象有更强大的数据库访问能力,无论是对数据库的插入,更新和删除这类无需返回结果集的操作,还是对 Select查询这样需返回结果集的操作都一样简单 。
Command对象的常用属性见表 11-6。
表 11-6 Command对象的属性属性 意义描述
ActiveConnection 定义了 Command对象的连接信息,用来指定当前的Command对象的操作对象是哪个 Connection对象
CommandText
定义传送给数据提供者的命令文本。它被用来设定或返回一个字符串,该字符串包含一个 SQL命令、一个表名或一个存储过程名。默认值为空字符串
CommandType 指示 CommandTem属性中设定的“命令字符串”的类型
CommandTimeout 用来设定等候运行一条命令的最长等待时间,超过该时间命令对象中止并产生一个错误。设定为 0时表示无限期等待
Name 用来设置和读取一个 Command对象的名字
Prepared 该属性指示在命令被执行前是否要用命令创建一个预备语句
State 用来设置或读取当前 Command对象的状态是打开的或关闭的说明,CommandType属性指示 CammandText属性中设定的,命令字符串,的类型,即用来指 ADO如何解释 CammandText参数的参数值,它的取值与意义与表
11-5中 Options参数的取值及意义相同 。
Command对象的常用方法有 Execute方法,用来运行 CommandText属性所设定的 SQL查询,SQL说明命令或存储过程,以实现与数据库的通讯 。 其语法为:
有返回记录的格式:
Set Rs = Comm,Execute(RecordsAffected,
Parameters,Options)
无返回记录的格式:
Comm.Execute RecordsAfiected.
Parameters,Options
其中,Rs为创建的 Recordsed对象; Comm为已经创建的 Command对象 。
RecordAfiected为可选参数,返回此次操作所影响的记录数 。 Parameters为可选参数,表示一个 SQL
语句的参数集合 。 Options为可选参数,用来指定 ADO
如何解释 CommandText参数的参数值,它的取值与意义与表 11-5中 Options参数的取值及意义相同 。
4,Recordset对象
Recordset对象对应着 Command对象的查询返回结果,或者是直接建立的一个带查询的结果集 。 它把从数据库内查询到的结果封装在一起,并提供简单快捷的方式去访问每一条记录内每一字段的数据,在后面的章节我们会详细去了解这些方式 。
Recordset对象实际上是依附于 Connection对象和
Command对象之上的 。 通过建立及开启一个 Connection
对象,可以与我们关心的数据库建立连线;通过使用
Command对象,则可以告诉数据库我们想要做什么:是插入一条记录,还是查找符合条件的记录;通过使用
Recordset对象,则可以方便自如地操作 Command对象返回的结果 。 这三个对象中的每 — 个都是必要的,缺一不可 。
(1) Recordset对象的属性
Recordset对象的常用属性见表 11-7。
表 11-7 Recordset对象的常用属性属性 意义描述
ActiveConnection 定义了与数据提供者的连接信息,用来指定当前的RecordSet对象属于哪个 Connection对象
Source 指示 RecordSet对象的数据源,可以是一个 command对象名、SQL语句、数据库表或存储过程
CursorType 指定 RecordSet对象所使用的光标类型
LockType 表示编辑时记录的锁定类型
Filter 用来设定一个过滤条件,以便对 RecordSet记录进行过滤
CacheSize 表示一个 RecordSet对象在高速缓存中的记录数
Maxrecords 执行一个 SQL查询时,返回 RecordSet对象的最大记录数
Bof 判断记录指针是否到了第一条记录之前
Eof 判断记录指针是否到了最后一条记录之后
RecordCount
返回 RecordSet对象的记录数 (在使用键盘光标时,该属性返回的可能是不太准确的数值;一般情况下,并不用这种方法来统计 RecordSet中的记录数,因为它的性能并不稳定 )
Bookmark 书签标记,用来保存存当前记录的位置
AbsolutePosition 用来设定 RecordSet对象中当前记录的顺序位置是第几行记录
PageSize 表示 RecordSet对象的页面大小 (每页多少条记录 ),默认值为10
PageCount 表示 RecordSet对象的页面个数
AbsolutePage 表示当前记录的页号
EditMode 指示当前记录的编辑状态,0 – 已被编辑; 1 – 已被修改而未提交; 2 – 存入数据库的新记录
Status 对 RecordSet对象进行批量更新后,查询当前记录的状态说明:
① CursorType属性指定 RecordSet对象所使用的光标类型 。 不同的光标类型决定了对 RecordSet所能做的操作 。 共有四种光标类型,0 - 前滚光标
(ForwardOnlyCursor),光标只能向前移动,执行效率高,是 Cursor 的 默 认 值 ; 1 - 键盘光标
(KeysetCursor),光标可向前向后移动,RecordSet
记录集同步反映自它创建后其他用户所作的修改和删除,但却不能同步反映自它创建后其他用户新增加的记录; 2 - 动态光标 (DynamicCursor),光标可向前向后移动,任何时候 RecordSet记录集都同步反映其他用户的任何操作; 3 - 静态光标 (StaticCursor),
光标可向前向后移动,自创建后无法同步反映其他用户所做的任何操作,它的功能简单但消耗资源少 。
② LockType属性表示编辑时记录的锁定类型 。
它决定了当不止一个用户试图同时改变一个记录时,
RecordSet如何处理数据记录 。 它的取值有,0 - 只读锁定,记 录 只 读,不 能 更 新 RecordSet,为
LockType的默认值; 1 - 悲观锁定,编辑记录开始立刻锁定,直到提交给数据提供者; 2 - 乐观锁定,一次锁定一条记录,只有调用 Update方法提交数据时才锁定记录; 3 - 乐观的批量更新,允许同时更新多条记录 。
③ Filter属性用来设定一个过滤条件,以便对
RecordSet记录进行过滤 。 使用的优点是可以在已经存在的 RecordSet对象上进一步过滤出所需的记录 。
但这种方式增加了系统的开销 。 它有两种使用方式:
方式 1:使用关系表达式,例如:
Rs.Filter = "bh" > 30
其中 Rs是 已 经创 建的 RecordSet对象 ; bh是
RecordSet对象的字段 ( 数值型 ) 。
方式 2:使用准则常量,0 - 清除以前的 Filter,
允许看见所有记录; 1 - 只允许查看已修改但未提交的记录; 2 - 允许查看最后删除,Resync,批量更新,
或删除批量方式所影响的记录; 3 - 允许查看数据库最后读取结果的数据 。 例如:
Rs.Filter = 1
可以实现更新整个批量记录之前只显示用户修改的记录,使用户在提交数据之前能够进行检查 。
④ BookMark属性用来存储当前记录的位置 。 并非每一个数据提供者都支持这个属性 。 当创建一个允许使用 BookMark属性的 RecordSet对象时,给每个记录都标上一个独一无二的 BookMark,利用 BookMark可以返回访问过的记录 。
⑤ Status属性对于多用户连接管理特别有用,
通过该属性可以看出更新记录的失败原因 。 它的返回值和意义如表 11-8所示 。
表 11-8 Status属性的值和意义值 意义描述 值 意义描述
0 记录更新成功 1024 存在记录锁定,新记录未保存
l 新纪录 2048 使用乐观并发事件,未保存
2 记录被修改 4096 用户违反完整性规则,未保存
4 记录被删除 8192 很多待定修改,记录未保存
8 记录未被修改 16384 与一存储对象相冲突,未保存
16 书签不合法,记录未保存 32768 内存不够,记录未保存
64 影响多个记录,未保存 65536 用户没有足够权限,未保存
128 指向一待定插入,记录未保存
131072 违反基本数据库原理,未保存
256 操作被取消,记录未保存 262144 记录已从数据源删除
(2) RecordSet对象的方法
RecordSet对象的方法及意义见表 11-9。
表 11-9 RecordSet对象的方法及意义方法 意义描述
Open 打开一个 RecordSet对象
Close 关闭一个 RecordSet对象并释放相关的资源.
Clone 创建一个 RecordSet对象的完全拷贝,但只有所用的 RecordSet对象类型允许使用 BookMarks时才能使用该方法
MoveFirst 把 RecordSet指针指向第一行记录
MoveLast 把 RecordSet指针指向最后一条记录 (该 RecordSet必须支持书签 )
MovePrevious 把 RecordSet指针上移一行 (使用前应判断 BOF是否为真;该RecordSet必须支持书签 )
Movenext 把 RecordSet指针下移一行 (使用前应判断 EOF是否为真 )
Move 把 RecordSet指针指向指定的记录
GetPows 从一个 RecordSet对象读取一行或多行记录到一个数组中
NextRecordSet
清除当前的 RecordSet并执行下一条指令,以传回下一个
RecordSet对象,如果没有下一条指令则返回 Nothing给
RecordSet
Requery 重新执行的 SQL查询操作,以更新 RecordSet对象中的数据
Resync 从数据源更新当前的 RecordSet记录,实现与数据源的同步
Addnew 增加一条空纪录
Delete 删除当前记录
Update 保存当前记录的任何变动
CancelUpdate 取消前一个 Update方法所做的一切修改
UpdateBatch RecordSet工作在批量方式时,取消对 RecordSet的更新
Suports 获取创建的 RecordSet对象的能力信息说明:
① Open方法:打开一个 RecordSet对象 。 其语法格式为:
Rs.Open[Source][,ActiveConnection]
[,CursorType][,LockType][,Option]
其中,Rs为已经创建的 RecordSet对象; Source为可选参数,可以是一个 Command对象名,SQL字符串存储过程 或数 据库 的表 名; ActiveConnection参见
ActiveConnection属性; CursorType是 RecordSet对象所使用的光标类型,用法参见 CursorType属性;
LockTypec是编辑 RecordSet对象记录时所使用的锁定类型,用法参见 LockType属性; Options指示数据提供者如何处理 Source的内容类型,它的取值与意义见表
11-5。
② 使用 Close方法关闭 RecordSet对象,并不从内存中删除该对象,只是无法读取其中的数据,但仍然可以读取它的属性 。 因此一个关闭的 ReccordSet对象还可以用 Open方法打开并保持其原有属性 。 如果正在进行编辑更新数据的操作,在调用 Close方法前必须先调用 Update或 CancelUpdate方法,否则将会出现错误 。 如果以批量模式更新数据记录 (Reccordset的
LockType属性设为 3),那么对缓冲区数据的修改将全部丢失 。 另外,使用 Clone方法复制一个已经打开的
RecordSet对象,调用 Close方法不影响任何复制的
RecordSet对象 。
用下面的命令可以释放 RecordSet对象所占用的所有资源:
set Rs = nothing
③ Move方法用于把记录指针指向指定的记录 。
其语法格式为:
Move n [,start]
其中 n为要移动的记录数,取正时表示向前 (下 )
移动,取负时表示向后 (上 )移动; start是可选参数,
表示移动的起点 。
④ 使用 Move,MoveFirst,MoveLast,
MovePrevious,MoveNext方法移动记录指针时,需要注意 RecordSet对象的光标类型 。 如,前滚光标,限制了记录指针只能向前移动 。
⑤ GetRows方法从一个 RecordSet对象读取一行或多行记录到一个数组中,一般用来读取大量的数据 。
其语法格式为:
Myarray = Rs.GetRows(rows,start,fields)
其中 Myarray为目标数组名; Rs为已经创建的
RecordSet对象; Rows为返回数组的行数; start为读取数据的起点 (书签 ); Fields为 RecordSet的字段 。
⑥ AddNew方法用于增加一条空纪录 。 调用该方法时在 RecordSet对象中增加一个新行,并将指针移到行首以准备保存新数据 。 该方法一般和 Update方法相搭配共同完成数据更新的任务 。 不过这种方法很消耗资源,效率最低,最好用 SQL语句来实现数据更新 。
⑦ Delete方法用于删除当前记录 。 当 RecordSet
工作在批量方式时,可实现批量删除 。 不过该方法非常消耗系统资源,效率非常低 。 其语法格式为:
Delete [value]
其中 value = 1( 默认值 ) 表示该方法只删除当前记录; value = 2表示该方法删除所有由 Filter属性设定的记录 。
11.2.2 访问数据库
1,连接到数据源
2,使用 Recordset对象处理结果
1,连接到数据源
(1) 创建连接字符串创建 Web数据应用程序的第一步是为 ADO提供一种定位并标识数据源的方法 。 这一步通过,连接字符串,
实现 。 连接字符串是一系列用分号分隔的参数,用于定义诸如数据源提供程序和数据源位置等参数 。 ADO
使用连接字符串标识 OLE DB提供程序并将提供程序指向数据源 。 提供程序是一个组件,用来描述数据源并以行集合的形式将信息展示给应用程序 。
表 11-10列出了几种通用数据源的 OLE DB连接字符串 。
表 11-10 常用的通用数据源的 OLE DB连接字符串数据源 OLE DB连接字符串
Microsoft Access Provider=Microsoft.Jet.OLEDB.4.0;Source=指向,mdb文件的物理路径
Microsoft SQL
Server
Provider=SQLOLEDB.1;Source=指向服务器上数据库的路径
Oracle Provider=MSDAORA.1;Source=指向服务器上数据库的路径
Microsoft Indexing
Service
Provider=MSIDXS.1;Source=指向文件的路径为了向后兼容性,ODBC的 OLE DB提供程序支持
ODBC连接字符串语法 。 表 11-11列出了常用的 ODBC连接字符串 。
表 11-11 常用的 ODBC连接字符串数据源驱动程序 ODBC连接字符串
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=指向,mdb文件的物理路径
SQL Serverr Driver={SQL Server};SERVER=指向服务器的路径
Oracle Driver={Microsoft ODBC for Oracle};SERVER=指向服务器的路径
Microsoft Excel Driver={Microsoft Excel Driver (*.xls)};DBQ=指向,xls文件的物理路径 ; DriverID =278
Microsoft Excel 97 Driver={Microsoft Excel Driver (*.xls)};DBQ=指向,xls文件的物理路径 ;DriverID=790
Paradox Driver={Microsoft Paradox Driver (*.db)};DBQ=指向,db文件的物理路径 ; DriverID=26
文本 Driver={Microsoft Text Driver (*.txt;*.csv)}; DefaultDir=指向,txt文件的物理路径
Microsoft Visual
FoxPro?(带有一个数据库容器)
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBC;SourceDb=指向,dbc文件的物理路径
Microsoft Visual
FoxPro(不带数据库容器)
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBF;SourceDb=指向,dbf文件的物理路径
(2) 连接到数据源
ADO提供的 Connection对象,用于建立和管理应用程序与 OLE DB兼容数据源或 ODBC兼容数据库之间的连接 。 Connection对象的属性和方法可以用来打开和关闭数据库连接,并发布对更新信息的查询 。
要建立数据库连接,首先必须创建 Connection对象实例 。 下述代码创建 Connection对象实例,接着打开一个连接:
' 创建 connection对象
Set conn = Server.CreateObject("ADODB.Connection")
' 使用 OLE DB连接字符串打开连接
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source
=C:\MarketData\rsgl.mdb"
或
' 创建 connection对象
set conn=server.createobject("adodb.Connection")
' 创建 OLE DB连接字符串
CS="Provider=Microsoft.jet.OLEDB.4.0;Data Source="
conn.ConnectionString=CS & Server.MapPath("rsgl.mdb")
' 打开连接
conn.Open
说明:
① 连接字符串在等号 (=)的左右不包含空格 。
② 在上例中,Connection对象的 Open方法将引用连接字符串 。
2,使用 Recordset对象处理结果建立了连接对象 Connection,并打开了数据库连接后,就可以使用 Recordset对象存取表中的记录 。
要使用 Recordset对象处理结果,首先必须创建
Recordset对象实例 。 下述代码创建 Recordset对象实例,并打开 Recordset对象:
' 创建 Recordset对象
Set RS=Server.CreateObject("adodb.recordset")
' 打开 Recordset对象
RS.Open "职工工资 ",conn,2,3,2
打开 Recordset对象后,就可以读取,插入,删除和更新其中的记录 。 下面通过一个综合使用
Recordset对象属性和方法的例子来说明记录集
Recordset对象的应用 。
【 例 11-1】 综合使用 Recordset对象的属性与方法,
建立一个工资管理网页应用程序,如图 11-1所示 。
工资管理网页应用程序包括 6个 asp文件,它们分别是:
① Main.asp:工资管理网页主框架,包括两个框架 。 上方框架为控制菜单,下方框架为数据显示,操作区域 。
② Menu.asp:上方框架的来源网页,用以控制各种数据操作 。
③ List1.asp:记录显示页面 。
④ List2.asp:记录修改页面,用以修改指定记录数据 。
⑤ List3.asp:记录增加页面,用以增加新记录 。
⑥ List4.asp:记录删除页面,用以删除指定记录 。
(1) 主框架网页主框架 网页 Main.asp的代码如下:
<HTML>
<FRAMESET ROWS="100,*" BORDER="0">
<FRAME NAME="Top" NORESIZE SCROLLING="No" SRC="Menu.asp">
<FRAME NAME="Bottom" NORESIZE SRC="list1.asp">
</FRAMSET>
</HTML>
说明:下方框架的名称为,Bottom”,各个记录操作网页都将在此打开 。
(2) 控制菜单网页控制菜单网页 Menu.asp是上方框架的来源网页 。 其代码 。
说明:以超级链接作为控制菜单,前 4个链接以不同的参数连接网页 List1.asp,后 3个链接分别连接 3个不同的网页文件 。
(3) 记录显示记录显示网页 List1.asp显示记录集 Recordset对象的单条记录,其 代码 。
说明:
① 记录集 Recordset对象的 AbsolutePosition属性设置或返回当前记录号 。
② fields.count表示记录集中字段的个数;
fields(i).name 属 性 表 示 第 i+1 个 字 段 的 名 称 ;
fields(i).value属性则表示当前记录第 i+1个字段的值 。
③ 应及时使用 Connection对象和 Recordset对象的 Close方法关闭数据库连接,并释放对象所占用的内存空间 。
(4) 记录修改修改数据需要用到 Recordset对象的 Update方法 。
记录修改网页 List2.asp以文本框的形式显示待修改的记录,提交按钮 ( 确定修改 ) 用以提交修改内容,其代码 。
说明:
① 当文本框中的内容改变时,事件代码自动计算
,实发工资,。
② ShowPage过程同时包括记录数据的更新功能 。
(5) 记录增加记录增加页面 List3.asp用以增加新记录,其中代码用到 Recordset对象的 AddNew方法 。 代码 。
(6) 记录删除删除数据需要用到 Recordset对象的 Delete方法 。
记录删除网页 List4.asp的 代码 。
11.3 上机练习打开 Recordset对象后,记录指针 ( 也称,光标,)
指向首记录 。 要读取其他的记录,需要用到 Recordset
对象的属性和 Move方法 。
【 练习 11-1】 打开数据库 rsgl.mdb,将其中,职工工资,表记录分页列表 显示,如图 11-3所示 。
图 11-3 分页列表显示说明:
① 将文件以 list5.asp为文件名存盘 。
② Recordset对象的 PageSize属性表示分页大小;
PageCount表示页面数; AbsolutePage属性表示当前页号 。
③ 代码中使用 Recordset对象 MoveNext方法,将指针移向下一条记录 。
④ 代码显示 。
【 练习 11-2】 修改记录的网页 。
程序代码,运行结果 。
说明:
① 将文件以 list6.asp为文件名存盘 。
② 本练习综合了超级链接和提交按钮的使用 。