,ASP程序设计,1
第 8章 ADO对象
8.1 ADO概述
8.2 Connection对象
8.3 Command对象
8.4 RecordSet对象
,ASP程序设计,2
8.1 ADO概述
8.1.1 ASP与数据库
8.1.2 ODBC的设置
8.1.3 ADO中的对象和数据集合
,ASP程序设计,3
8.1.1 ASP与数据库
ASP程序对数据库的整个访问 过程,客户端的浏览器向 Web服务器提出 ASP页面文件 请求,服务器对该页面进行 解释,并在服务器端 运行,完成 数据库的操作,再把数据库操作的结果生成的网页 返回 给浏览器,浏览器再将该网页内容 显示 在客户端。
ASP是通过一组被称为 ADO( ActiveX Data
Objects,ActiveX数据对象 )的对象模块来访问数据库的。
ADO是在 OLE DB技术的基础上实现的。
,ASP程序设计,4
8.1.1 ASP与数据库在 OLE DB中,数据的交换是在 数据使用者 ( Data Consumers) 和 数据提供者 ( Data
Provider) 之间进行的 。
连接应用程序和 OLE DB的 桥梁 就是 ADO
对象。 ADO是一个 OLE DB的 使用者,它提供了对 OLE DB数据源的 应用程序级 访问。
,ASP程序设计,5
8.1.1 ASP与数据库
A S P 应用程序
A D O ( A c t i v e X D a t a O b j e c t s )
O L E D B
O L E D B 的 O D B C 驱动程序
O D B C
关系型数据库(如 A c c e s s,S Q L S e r v e r 等)
O L E D B 的数据库驱动程序非关系数据库 其它数据(如,E x c e l 表格等)
,ASP程序设计,6
8.1.2 ODBC的设置
1,ODBC概述
ODBC( Open Database Connectivity,
开放式数据库连接 ) 是数据库访问的一种标准接口 。 它将所有对数据库的底层操作全部 隐藏 在其驱动程序内核中,向访问网络数据库的应用程序提供了一种 通用的语言 。
,ASP程序设计,7
8.1.2 ODBC的设置数据库应用程序驱动程序管理器
S Q L S e r v e r
驱动程序
O r a c l e
驱动程序
F o x P r o
驱动程序

S Q L S e r v e r
数据源
O r a c l e
数据源
F o x P r o
数据源

数据 数据 数据 数据
ODBC 由 数据库应用程序,
驱动程序管理器,数据库驱动程序 和 数据源 四部分组成 。
,ASP程序设计,8
8.1.2 ODBC的设置
ODBC数据源是整个 ODBC设计的一个重要组成部分,每个 ODBC数据源都被指定一个 名字,即
DSN( Data Source Name),DSN是应用程序与数据库之间的 桥梁,在应用程序中只需要向 ODBC管理器 指明 具体的 DSN,ODBC管理器就会使用所设置的驱动程序与该 DSN所代表的数据库 通信 。
ODBC数据源分为 机器数据源 和 文件数据源 两种,
机器数据源把信息存储在 Windows注册表 中
文件数据源把信息存储在扩展名为,dsn的 文件 中
,ASP程序设计,9
8.1.3 ADO中的对象和数据集合
Connection对象 Error对象Errors数据集合
Recordset对象
Commend对象
Propertie对象Properties数据集合
Field对象Fields数据集合
Propertie对象Properties数据集合
Parameter对象Parameters数据集合
Propertie对象Properties数据集合
,ASP程序设计,10
8.2 Connection对象
Connection对象用于建立和管理应用程序与
OLE DB兼容数据源或 ODBC兼容数据库之间的连接,并可以对数据库进行一些相应的操作 。
Conn是新创建的 Connection对象的名称
Set Conn =
Server.CreateObject("ADODB.Connection")
,ASP程序设计,11
8.2 Connection对象
8.2.1 Connection对象的方法
8.2.2 Connection对象的属性
8.2.3 Connection对象的数据集合
,ASP程序设计,12
8.2.1 Connection对象的方法
1,Open方法用于创建与数据源的物理连接 。
connection.Open ConnectionString,UserID,Password
ConnectionString用于指定连接字符串
UserID指定建立连接时所使用的用户名
Password指定建立连接时所使用的密码
,ASP程序设计,13
8.2.1 Connection对象的方法
( 1)通过 ODBC连接
1)在,ODBC数据源管理器,中 设置过 的数据源
<%
Set conn =Server.CreateObject
("ADODB.Connection")
conn.Open "DSN=stusql;UID=sa;PWD="
%>
,ASP程序设计,14
8.2.1 Connection对象的方法
2) 没有 在,ODBC数据源管理器,中设置过的数据源,
<%
Set conn = Server.CreateObject
("ADODB.Connection")
strodbc="Driver={Microsoft Access
Driver (*.mdb)};DBQ="&Server.MapPath
("\") &"\student.mdb;UID=;PWD=; "
conn.Open strodbc
%>
,ASP程序设计,15
8.2.1 Connection对象的方法
( 2) 通过 OLE DB连接
1) 通过 OLE DB连接 SQL Server的数据库
strProvider =
"Provider=SQLOLEDB.1;Data Source=zjf;
Initial Catalog=stu;User ID=sa; Password=; "
Provider指定用于连接的提供者的名称
Data Source指定数据库服务器的名称
Initial Catalog指定要连接的数据库名称
User表示登录 SQL Server服务器的用户帐号
Password表示登录 SQL Server服务器的用户密码
,ASP程序设计,16
8.2.1 Connection对象的方法
2) 直接通过 OLE DB连接 Access数据库
strProvider = "Provider=
Microsoft.Jet.OLEDB.4.0;Data Source="
& Server.MapPath("\") & "\student.mdb"
Provider指定用于连接的提供者的名称
Data Source指定 Access数据库的物理位置
,ASP程序设计,17
8.2.1 Connection对象的方法
2,Execute方法执行指定的查询,SQL语句等操作 。
connection.Execute CommandText,
RecordsAffected,Options
Set recordSet = connection.Execute
(CommandText,RecordsAffected,Options)
CommandText包含要执行的 SQL语句,表名,存储过程或特定者提供者的文本
RecordsAffected是执行指定的操作所影响的记录数目
Options参数指定了 CommandText的性质
,ASP程序设计,18
8.2.1 Connection对象的方法
Execute方法返回的 Recordset对象始终为只读、仅向前的游标。
常量 取值 说明
AdCmdText 1 表明被执行的字符串包含一个命令文本
AdCmdTable 2 表明被执行的字符串包含一个表的名字
AdCmdStored
Proc
4 表明被执行的字符串包含一个存储过程名
AdCmdUnkno
wn
8 表明 CommandText参数中的命令类型未知 ( 默认值 )
,ASP程序设计,19
8.2.1 Connection对象的方法在 SQL语句中单引号表示字符串数据的开始和结束,而双引号用来指定 VBScript脚本内字符串的开始和结束 。
username=Requesr.Form("username")
Commandtext = " Select * From
t_student Where d_name='" &
username & "'"
,ASP程序设计,20
8.2.1 Connection对象的方法
3,Close方法关闭 Connection对象以便 释放 所有关联的系统资源 。 关闭对象并非将它从内存中删除,要将对象从内存中 完全删除,可将对象变量设置为 nothing。
Connection.close
Set conn = nothing
,ASP程序设计,21
8.2.1 Connection对象的方法
4,BeginTrans,CommitTrans和 RollbackTrans方法这三个方法都和 Connection对象的 事务 管理有关 。
BeginTrans表示 开始 新事务; CommitTrans表示 保存 任何更改并结束当前事务,它也 可能启动 新事务; RollbackTrans表示 取消 当前事务中所作的任何更改并结束事务,它也 可能启动新事务 。
level = connection.BeginTrans()
connection.BeginTrans
connection.CommitTrans
connection.RollbackTrans
,ASP程序设计,22
8.2.2 Connection对象的属性
1,ConnectionTimeout属性用于设置 Connection对象的 Open方法 与数据库连接时的 最长等待时间
Connection.ConnectionTimeout = seconds
2,CommandTimeout属性用于设置 Connection对象的 Execute方法 运行的 最长执行时间 。
Connection.CommandTimeout = seconds
,ASP程序设计,23
8.2.2 Connection对象的属性
3,ConnectionString属性用于设置 Connection对象的数据库连接信息 。
<%
Set conn =
Server.CreateObject("ADODB.Connection")
conn.ConnectionString="Provider=SQLOLE
DB.1;Data Source=zjf;" Initial
Catalog=stu;User ID=sa; Password=; "
conn.Open
%>
,ASP程序设计,24
8.2.2 Connection对象的属性
4,Provider属性用于取得或设置 Connection对象的 提供者 。
5,CursorLocation属性用于设置或返回 游标 引擎的位置
6,Mode属性指示在 Connection对象中 修改 数据库的 权限 。
Connection.Mode = ModeValue
,ASP程序设计,25
8.2.2 Connection对象的属性
7,DefaultDatabase属性设置 Connection对象 缺省 的数据库名称
Connection.DefaultDatabase =
"DataBaseName"
8,State属性取得 Connection对象的状态,语法为:
Connection,State = StateValue
,ASP程序设计,26
8.2.3 Connection对象的数据集合
1,Error对象和 Errors数据集合
( 1) Error对象 。 每个 Error对象代表了特定的 数据提供者错误 而不是 ADO错误 。 属性有:
Description:错误或警告发生的原因或描述信息 。
Number:所发生的错误或警告代码 。
Source:造成系统发生错误或警告的来源 。
NativeError:所发生的错误或警告代码 。
SQLState:最后一次的 SQL命令运行状态 。
,ASP程序设计,27
8.2.3 Connection对象的数据集合
( 2) Errors数据集合包含在响应涉及 提供者 的单个失败时产生的 所有
Error对象 。 Errors数据集合由系统 自动 创建。
Count:取得 Errors数据集合中所包含的 Error对象个数。
Clear:清除 Errors数据集合中的 Error对象。
Item:用来取得 Errors数据集合中的 Error对象。
Set Err = Errors.Item(Index)
Set Err = Errors(Index)
,ASP程序设计,28
8.2.3 Connection对象的数据集合
2,Property对象和 Properties数据集合
( 1) Property对象代表由数据提供者定义的 ADO对象的 动态特性 。 动态属性 只能 通过 Properties集合的属性或方法来引用
Name属性:对象属性的名称。
Value属性:对象的属性值。
Type属性:对象属性的数据类型。
Attributes属性:对象的特性。
,ASP程序设计,29
8.3 Command对象
Command对象用于定义对数据源执行的 命令,包括 SQL命令,存储过程等 。 Command对象不仅能够对一般的数据库信息进行操作,
还可以完成对数据库 存储过程 的调用 。
Set comm =
Server.CreateObject("ADODB.Command")
comm是新创建的 Command对象的名称
,ASP程序设计,30
8.3 Command对象
8.3.1 Command对象的属性
8.3.2 Command对象的方法
8.3.3 Command对象的数据集合
8.3.4 调用存储过程
,ASP程序设计,31
8.3.1 Command对象的属性
1,ActiveConnection属性指定当前的 Command对象 所属 的 Connection
对象
2,CommandText属性设置或返回传送给数据提供者的 命令文本 。
Command.CommandText =
CommandTextValue
,ASP程序设计,32
8.3.1 Command对象的属性
3,CommandType属性指明 Command对象的 CommandText属性中设定的字符串的类型常量 取值 说明
AdCmdText 1 指定 CommandText的类型为 SQL命令
AdCmdTable 2 指定 CommandText的类型为数据库表的名称
AdCmdStoredProc 4 指定 CommandText的类型为存储过程名称
AdCmdUnknown 8 默认值 。 CommandText属性中的命令类型未知
,ASP程序设计,33
8.3.1 Command对象的属性
4,CommandTimeout属性设置 Command对象 Execute方法的最长执行时间
Command.CommandTimeout = Seconds
5,Prepared属性该属性用于指定在执行 ASP程序前是否保存命令的编译版本
,ASP程序设计,34
8.3.2 Command对象的方法
1,Execute方法用于执行在 CommandText属性中指定操作
Set recordSet = command.Execute
(RecordsAffected,Parameters,Options)
command.Execute RecordsAffected,
Parameters,Options
RecordsAffected,操作所影响的记录数目
Parameters,是用 SQL语句传送的参数值
Options,指示 CommandText属性设定的字符串的类型
,ASP程序设计,35
8.3.2 Command对象的方法
2,CreateParamete方法创建新的 Parameter对象
Set parameter = command.CreateParameter
(Name,Type,Direction,Size,Value)
Name代表创建的 Parameter对象名称。
Type指定 Parameter对象的数据类型
Direction指定 Parameter对象的类型
Size指定参数值最大长度
Value指定 Parameter对象的值
Set param = comm.CreateParameter
("name",adVarChar,adParamInput,6,"张三 ")
,ASP程序设计,36
8.3.3 Command对象的数据集合
1,Parameter对象代表与参数化查询 关联 的参数、进 /出参数以及存储过程的返回值
Name属性,Parameter对象属性的名称。
Value属性,Parameter参数的设置初值。
Type属性,Parameter对象属性的数据类型。
Attribute属性,Parameter对象的特性。
,ASP程序设计,37
8.3.3 Command对象的数据集合
2,Parameters数据集合
Count属性:给定 Parameters集合中的 Parameter对象的数目。
Append方法:将 Parameter对象追加到 Parameters集合中。 Parameters.Append object
Item方法:根据名称或序号返回 Parameters集合中的
Parameter对象。
Set object = Parameters.Item ( Index )
Delete方法,从 Parameters集合中删除 Parameter对象 。 Parameters.Delete Index
Refresh方法:更新 Parameters集合中的 Parameter对象。 Parameters.Refresh
,ASP程序设计,38
8.3.4 调用存储过程
1.存储过程概述存储过程就是存储在 数据库 中的 过程,其中包含了欲对数据库执行操作的语句。存储过程在 创建时 就被编译和优化,调用一次以后,相关信息就保存在 内存中,下次调用时可以直接执行。
实现了模块化编程。
具有对数据库立即访问的功能。
可以加快程序的运行速度。
可以减少网络流量。
可以提高数据库的安全性
,ASP程序设计,39
8.3.4 调用存储过程
2.存储过程的创建
3.存储过程的调用
,ASP程序设计,40
8.4 RecordSet对象
RecordSet对象是 ADO对象中最 灵活,功能最 强大 的一个对象,利用该对象可以方便地操作数据库中的记录,完成对数据库的 几乎所有操作 。
RecordSet对象表示的是来自 数据表 或命令执行结果的 记录集 。
Set rs=
Server.CreateObject("ADODB.RecordSet")
rs是新创建的 RecordSet对象的名称
,ASP程序设计,41
8.4 RecordSet对象
8.4.1 RecordSet对象的属性
8.4.2 RecordSet对象数据集合
8.4.3 RecordSet对象的方法
8.4.4 RecordSet对象的应用
,ASP程序设计,42
8.4.1 RecordSet对象的属性
1,ActiveConnection属性用于设置数据库的连接信息
2,Source属性用于设置或返回记录集中数据的来源 。
3,CursorLocation属性用于设置或返回游标引擎的位置 。
,ASP程序设计,43
8.4.1 RecordSet对象的属性
4,CursorType属性用于设置 RecordSet对象使用的游标类型 。
RecordSet,CurSorType = CurSorTypeValue
常量 参数值 说明
AdOpenForward
Only
0 仅向前游标,只能在记录集中向前移动 ( 默认值 )
AdOpenKeySet 1 键集游标,可以在记录集中前,后移动 。 如果其他用户删除或改变了某条记录,记录集中将反映这个变化 。 ( 添加记录除外 )
AdOpenDynamic 2 动态游标,可以在记录集中前,后移动 。 其他用户造成的记录的变化都将在记录集中有所反映 。
AdOpenStatic 3 静态游标,可以在记录集中向前或向后移动 。 不会对其他用户造成的任何记录的变化有所反映
,ASP程序设计,44
8.4.1 RecordSet对象的属性
5,LockType属性指定打开 RecordSet对象时服务器应使用的 锁定类型 。
RecordSet,LockType = LockTypeValue
常量 参数值说明
AdLockReadO
nly
0 只读 。 不能改变数据 ( 默认值 ) 。
AdLockPessimi
stic
1 保守式锁定 ( 逐个 ) 。 指定在编辑一个记录时立即锁定它 。
AdLockOptimi
stic
2 开放式锁定 ( 逐个 ) 。 只有在调用
Update方法时才锁定记录 。
AdLockBatchO
ptimistic
3 开放式批更新 。 用于批更新模式 。
,ASP程序设计,45
8.4.1 RecordSet对象的属性
6,MaxRecords属性指定通过查询返回给 Recordset对象的记录最大数目
7,RecordCount属性确定 RecordSet对象中记录的数目
,ASP程序设计,46
8.4.1 RecordSet对象的属性
8,BOF和 EOF属性
BOF( Begin Of File) 属性:用来判断 当前记录位置 是否位于 RecordSet对象的第一个记录 之前 。
EOF( End Of File),用来判断 当前记录位置 是否位于 RecordSet对象的最后一个记录之后 。
,ASP程序设计,47
8.4.1 RecordSet对象的属性
9,PageSize,PageCount,AbsolutePage,
AbsolutePosition 属性
PageSize属性 用于设置或返回 RecordSet对象内每一个逻辑页的记录条数 。
PageCount属性 用于返回 RecordSet对象的逻辑页数 。
AbsolutePage 属性 用 于 设 置 或 返 回 当 前 记 录 在
RecordSet对象中的绝对页数 。
AbsolutePosition属性 用于设置或返回当前记录在
RecordSet对象中的绝对位置。
,ASP程序设计,48
8.4.1 RecordSet对象的属性
10,Boo
kmark属性用于记录当前数据指针的位置
<%
'得到正确的 RecordSet(设为 rs)
......
'设置 Bookmark
varbk=rs.Bookmark
'移动记录指针
......
'返回 Bookmark标记的记录
rs.Bookmark=varbk
..,%>
,ASP程序设计,49
8.4.1 RecordSet对象的属性
11,EditMode属性用于返回当前记录的编辑状态
12,Filter属性用于返回当前记录的编辑状态
RecordSet.Filter=Criteria.String
Criteria.String是过滤条件字符串
,ASP程序设计,50
8.4.1 RecordSet对象的属性
( 1) 条件字符串
FieldName Operator Value
FieldName必须为 Recordset中的有效字段名 。
Operator必须为,<,>,<=,>=,<>,=
或 LIKE。
Value用于设置与字段值进行比较的值 。
( 2)预定义的常量
,ASP程序设计,51
8.4.1 RecordSet对象的属性
13,State和 Status属性
State用于取得 当前 RecordSet对象的 状态
Status用于查看 批量 更新或其它大量操作时
RecordSet对象的 状态
,ASP程序设计,52
8.4.2 RecordSet对象数据集合
1,Fields数据集合
Count属性,取得 Fields
数据集合中所包含的 Field
对象的数目。
Refresh方法,重新取得
Fields数据集合中所包含的
Field对象。
Item方法,利用 Field对象的名称或索引值得到某一个 Field对象。
rs("sex")
rs(0)
rs.Fields("sex")
rs.Fields(i0)
rs.Fields.Item("sex")
rs.Fields.Item(0)
,ASP程序设计,53
8.4.2 RecordSet对象数据集合
2,Field对象的属性
Name属性:字段的名称。
Type属性:字段的数据类型。
Attribute属性:字段的相关特性。
NumericScale属性:数值型字段允许存储的最大数。
Precision属性:数值型字段所允许的最大位数。
ActualSize属性:字段的实际长度。
DefinedSize属性:字段在数据库中所定义的长度。
OriginalValue属性:字段的原始值。
UnderlyingValue属性:字段的当前值。
Value属性:字段值
,ASP程序设计,54
8.4.2 RecordSet对象数据集合
3,Field对象的方法
AppendChunk方法:将数据 写 到数据库中 。
Field.AppendChunk Data
GetChunk方法,取出 部分或全部长二进制或长字符型数据
variable =field.GetChunk(Size)
,ASP程序设计,55
8.4.3 RecordSet对象的方法
1,Open方法创建与指定数据源的连接,并打开一个 RecordSet对象 。
recordSet.Open Source,ActiveConnection,
CursorType,LockType,Options
Source,指定数据源
ActiveConnection,指定与数据源的连接信息
CursorType,确定打开 RecordSet时使用的游标类型
LockType,确定打开 RecordSet时使用的锁定类型的值
Options,用于指定如何处理 Source的类型
,ASP程序设计,56
8.4.3 RecordSet对象的方法
2,Close方法关闭所指定的 RecordSet对象以便释放所有关联的系统资源 。
RecordSet.Close
关闭 Recordset对象对象并非将它从内存中删除 。 要将对象从内存中完全删除,可将对象变量设置为 Nothing。
,ASP程序设计,57
8.4.3 RecordSet对象的方法
3,MoveFirst,MoveLast,MoveNext,
MovePrevious方法
MoveFirst方法:将当前记录指针移动到
RecordSet对象的第一条记录。
MoveLast方法:将当前记录指针移动到
RecordSet对象的最后一条数据记录。
MoveNext方法:将当前记录指针移动到下一条数据记录。
MovePrevious方法:将当前记录指针移动到上一条数据记录。
BO F
记录 1
记录 2
记录 3
……
记录 N
E O F
Mo
v
eN
ex
t
Mo
v
ePr
ev
i
o
u
s
记录指针
(当前记录)
,ASP程序设计,58
8.4.3 RecordSet对象的方法
4,Move方法将记录指针移动到指定的位置
RecordSet.Move NumRecords,Start
NumRecords表示指针移动的数目
Start表示指针移动的基准点,可以是书签或常量 常数值 说明
AdBookmarkCurrent 0 默认 。 从当前记录开始
AdBookmarkFirst 1 从首记录开始
AdBookmarkLast 2 从尾记录开始
,ASP程序设计,59
8.4.3 RecordSet对象的方法
5,Update方法将 RecordSet对象中对当前记录所做的修改保存到数据库中 。
recordset.Update Fields,Values
Fields,指定欲修改的字段名
Values,指定欲修改字段的值
,ASP程序设计,60
8.4.3 RecordSet对象的方法
6,CancelUpdate方法用于 取消 在调用 Update方法前对当前记录或新记录所做的任何 更改 。
recordset.CancelUpdate
7,UpdateBatch和 CancelBatch方法
UpdateBatch用于 保存批次模式 的 更新 数据操作 。
RecordSet.UpdateBatch Affectrecords
CancelBatch方法用于 取消批次模式 的 更新 数据操作 。
recordset.CancelBatch AffectRecords
,ASP程序设计,61
8.4.3 RecordSet对象的方法
8,AddNew方法用来向 RecordSet对象中 插入 一条新记录 。
recordset.AddNew FieldList,Values
FieldList,新记录中的字段名列表
Values,与 FieldList对应的一组字段值
,ASP程序设计,62
8.4.3 RecordSet对象的方法
9,Delete方法删除 Recordset对象中的当前记录或一组记录
recordset.Delete AffectRecordsAffectRecords用于确定 Delete方法所影响的记录数目常量 说明
adAffectCurrent 默认 。 仅删除当前记录 。
AdAffectGroup 删除满足当前 Filter属性设置的记录 。
,ASP程序设计,63
8.4.3 RecordSet对象的方法
10,Supports方法确定指定的 Recordset对象所 支持 的功能类型 。
boolean = recordset.Supports( CursorOptions )
,ASP程序设计,64
8.4.4 RecordSet对象的应用
1.分页显示
,ASP程序设计,65
8.4.4 RecordSet对象的应用
2.修改数据
,ASP程序设计,66
8.4.4 RecordSet对象的应用
3.删除多条记录