【asp源码栏目提醒】:本文主要为网学会员提供“[IT/计算机]asp与sql网页数据库程序设计-11 - 讲义教程”,希望对需要[IT/计算机]asp与sql网页数据库程序设计-11 - 讲义教程网友有所帮助,学习一下!
11 ADO对象的基础与 应用 11-1 ADO对象的结构 11-2 Connection对象 11-3 Rrcordset对象的基础 11-4 ADO对象与ODBC的应用 11-5 Error对象
ASP与SQL网站数据库程序设计 304 11-1 ADO对象的结构 既然ODBC如此方便那么为什么又要推出新的OLE DB结构呢ODBC对于SQL的存取使用了C语言接口而OLE DB则是为COM Component Object Model而设计的。
因此对于用户而言采用OLE DB将会比ODBC的存取效率更高这就是
ASP要构建于OLE DB之上的原因。
11-1-1 ADO对象 面向对象的程序设计概念让程序的编写以模块化方式进行。
如此会使程序更有效率也会因为模块化设计的因素而使得维护工作变得比较容易。
数据库的存取将趋于一致性。
ADO可以省去不少时间而去
学习各种不同的SQL系统。
ADO可以将看起来复杂的数据库系统的连接、维护
工作变成一件相当容易的事。
图11-1 ADO对象的结构图 11-1-2 ADO的结构 要创建一个Recordset必须提供详细的用户识别码、连接密码及想要查询的条件这样才可以顺利连接到相应的数据库去进行数据的存取操作。
例第11章 ADO 对象的基础与应用 305 如用户要从数据库服务器上取得数据首先必须经过用户帐号及密码的确认确认无误后才可进一步取得和数据库的连接这种状态会一直持续到应用程序结束为止。
假如用户在任何时候想使用Recordset对象连接到数据库必须遵照前面连接到数据库的操作。
在ADO结构之下提供了几种对象供程序设计人员应用。
它们分别是 Connection对象 Recordset对象 Command对象 Error对象 Connection对象 lt Set OBJConnServer.CreateObject“ADODB.connection”gt 在这条语句执行之后实际上尚未连接到任何数据库系统只能说完成数据库连接前的定义工作下面将介绍如何连接到数据库系统。
11-2 Connection对象 lt Set OBJConnServer.CreateObject “ADODB.connection”gt 在这个实例执行之后实际上并未连接到任何数据库
系统只是完成数据库连接前的声明操作下面主要介绍如何连接到数据库。
11-2-1 连接、打开数据库的方法 OBJConn.open ConnectionString UserID Password 其中ConnnectionString代表一个数据源Data Source NameDSNUserID代表数据库系统授权连接的用户名Pass
word代表该用户的连接密码至于数据源请参考ODBC说明。
假设系统已经安装了MS SQL Server 2000则可以用以下的范例来连接数据库 lt Set OBJConnServer.CreateObject“ADODB.Connection” OBJConn.open “Trade” “test” “test1” gt
ASP与SQL网站数据库程序
设计 306 在此范例中使用上一章创建的“Trade”数据源。
范例程序EX11-01.
asp 图11-2 与数据库连接成功的范例执行结果 图11-3 与数据库连接失败的范例执行结果 程序内容 01: lt-- EX11-01.
asp 与SQL Server 建立连接 --gt 02: ltHTMLgt 03: ltHEADgt 04: ltMETA NAMEquotGENERATORquot ContentquotMicrosoft Visual Studio 6.0quotgt 05: ltTITLEgtEX11-01.
asp 与SQL Server 建立连接lt/TITLEgt 06: lt/HEADgt 07: ltBODYgt 08: lt 09: On Error Resume Next 10: TableName quot产品基本信息quot 11: Set OBJConn Server.CreateObjectquotADODB.Connectionquot 12: OBJConn.open quotTradequot quottestquot quottest1quot 第11章 ADO 对象的基础与应用 307 13: if OBJConn.State 1 then 14: Response.Write quotOBJConn 与数据库连接成功quot 15: OBJConn.Close 16: else 17: Response.Write quotOBJConn 对象的执行过程产生错误quot 18: end if 19: Set OBJConn Nothing 20: gt 21: lt/BODYgt 22: lt/HTMLgt 程序说明 第11行使用Server.CreateObject方法创建一个Connection对象并赋给名为OBJConn的对象变量。
第12行使用OBJConn变量的打开属性打开名为“Trade”的ODBC系统数据源同时在打开的过程中使用的登录ID为“Test”密码为“test1”。
第13行若帐号或密码错误OBJConn变量的状态值将会返回“0”。
正常连接时状态值将会返回“1”。
第14行若返回的值为“1”显示“OBJConn与数据库连接成功”的信息。
第15行关闭OBJConn所打开的连接通道。
第17行若返回的状态值为“0”显示“OBJConn变量的执行过程产生错误”的信息。
第19行将自定义的OBJConn变量释放。
11-2-2 直接使用ADO与SQL连接 lt Set OBJConn Server.CreateObject quotADODB.Connectionquot OBJConn.Open quotDriverSQL ServerDatabase数据库名称 Server服务器IPUID帐号PWD密码quot gt
ASP与SQL网站数据库程序设计 308 11-2-3 直接与Access MDB连接 程序内容 lt Connection.Open quotdriverMicrosoft Access Driver .mdb” amp_ “dbqe:PWSPWS.mdbquot gt 或是 lt Connection.Open quotdrivermicrosoft access driver .mdb” amp_ “dbqquotamp server.mappathquotpws.mdbquot gt 上述范例的第二种方法使用“server .mappathquotpws.mdbquot”打开数据库此方法可将Access数据库直接放在网站的
ASP执行目录中存取。
因其不使用ODBC就可打开数据库因此适用于
免费网站。
此种方法也有助于隐藏ODBC的连接不易被窃取ODBC的路径信息。
11-3 Recordset对象的基础 Recordset对象的属性如表11-1所示。
表11-1 Recordest对象的属性说明 属 性 说 明 AbsolutePage 设置当前记录所在位置是第几页 AbsolutePosition 设置记录集对象所在位置是第几条记录 ActiveConnection 设置记录集属于哪一个Connection对象 BOF 检验当前记录集对象所指位置是否在第一条记录之前若成立则返回True否则返回False 第11章 ADO 对象的基础与应用 309 续表 属 性 说 明 EOF 检验当前记录集对象所指位置是否在最后一条记录之后。
若成立则返回True否则返回False CacheSize 设置记录集对象在内存中缓存的记录数 Cousor 设置记录集对象的光标类型共分为四种分别为DynamicStaticForward-onlyKeyset EditMode 指定当前是否处于编辑模式 LockType 在记录集的当前位置锁定记录 PageSize 设置记录集对象一页所容纳的记录数 PageCount 显示记录集当前的页面总数 Recordset对象的方法如表11-2所示。
表11-2 Recordset对象的方法 方 法 说 明 AddNew 添加一条空白记录 CancelBatch 取消一个批处理更新操作 CancelUpdate 取消已存在的和新的记录所做的任何改变 Close 关闭打开的记录集 GetRows 取得记录集的多条记录 Movefirst 将RS记录集对象的指针移至记录集对象中最顶端的记录 Moveprevious 将RS记录集对象的指针向上移动一条 Movenext 将RS记录集对象的指针向下移动一条 Movelast 将RS记录集对象的指针移至记录集对象中最底端的记录 Open 打开一个记录集 Requery 重新执行查询 Update 向数据库提交对一条记录的改变或添加 Fields.count 显示该记录集对象内所含有的字段数
ASP与SQL网站数据库程序设计 310 Recordset对象可以创建一个记录集合并且将所需的记录从表中取出同时使用虚拟表格的方式每一行为一条记录每一列则代表一个字段提供给
ASP程序处理如下所示。
分类编号 产品代号 产品名称 产品简述 55 0001000001 LA-Gear Mouse PAD MODEL No. TMP – 0312 55 0001000002 LA-Gear Mouse PAD 1 MODEL No. TMP – 04 Recordset中的记录指针具有游标类型CursorType。
不同的游标类型可对记录集进行不同的操作默认值为0代表记录指针只能向前移动记录集也可定义成其他值允许记录指针在记录集中上下移动。
数据源本身具有锁定的能力LockType。
具有这项功能最主要的目的在于避免两个SQL Query操作同时写同一条记录。
当前记录指针的位置Recordset的MoveFirst方法可以将记录指针移到第一条记录的位置MoveLast方法可将记录指针移到记录集合的最后一条MoveNext方法可使指针移到下一条MovePrevious方法则是移到上一条。
Recordset对象在使用前同样需要使用Connection对象建立数据库的连接其步骤如下所示 1创建Connection对象打开数据源。
首先需要创建一个Connection对象并保存在OBJConn变量中然后打开数据源程序代码如下所示 Set OBJConn Server.CreateObjectquotADODB.Connectionquot OBJConn.Open strDSN 打开数据源 2创建Recordset对象。
在取得与数据库的连接之后接着即可创建Recordset对象其程序代码如下所示 Set Rs OBJConn.Execute SQLstr 3打开Recordset取得数据。
在Recordset对象创建完成之后即可打开Recordset对象的内容。
此Recordset对象的内容可以是表、SQL
查询语句如果是表其命令如下所示 Rs.Open quot产品基本信息quot OBJConn adOpenStatic adLockReadOnly 记录指针 第11章 ADO 对象的基础与应用 311 adCmdTable 或是 Set Rs OBJConn.ExceuteCommandText RecordsAffected Options 上述程序代码使用Recordset对象Rs的Open方法打开“产品基本信息”表第二个参数为Connection对象OBJConn后面三个参数为定义在文件adovbs.inc中的常数定义Recordset对象的存取方式。
4处理Recordset对象的记录。
在打开Recordset对象的记录集合之后即可开始使用Recordset对象的属性及方法进行表的操作或取得当前的状态。
例如取得Recordset对象的状态属性State如下所示 If Rs.State 1 Then Response.WritequotltbgtRs 对象目前处于打开的状态lt/bgtltbrgtquot Else Response.WritequotltbgtRs 对象目前处于关闭的状态lt/bgtltbrgtquot End If 上述程序代码是利用“If...Then...Else”语句的方式检查状态属性State查看当前Recordset对象的打开状态。
如果返回值为“1”则代表状态已打开返回值为“0”则代表状态已关闭。
5关闭Recordset对象。
Rs.Close Set Rs Nothing 在执行上述
程序代码之后将会关闭Recordset对象并且由“Set Rs Nothing”释放Recordset对象。
6关闭与数据库的连接。
最后关闭数据库连接OBJConn.CloseConnection对象的Close方法如下所示 OBJCConn.Close set OBJConn Nothing 范例程序EX11-02.
asp Set RsOBJConn.execute“Select 产品代号 产品名称 from 产品基本信息”
ASP与SQL网站数据库程序设计 312 图11-4 范例的执行结果 程序内容 01: lt-- EX11-02.
asp Recordset 执行范例 --gt 02: ltHTMLgt 03: ltHEADgt 04: ltMETA NAMEquotGENERATORquot ContentquotMicrosoft Visual Studio 6.0quotgt 05: ltTITLEgtEX11-02.
asp Recordset 执行范例lt/TITLEgt 06: lt/HEADgt 07: ltBODYgt 08: ltTable Border1gt 09: lt 10: On Error Resume Next 11: TableName quot产品基本信息quot 12: Set OBJConn Server.CreateObjectquotADODB.Connectionquot 13: strDSN quotDSNTradeuidtestpwdtest1quot 14: OBJConn.Open strDSN 15: SQLstr quotSelect 产品代号 产品名称 from quot amp TableName 16: Set Rs OBJConn.Execute SQLstr 17: Response.Write quotltTRgtquot 18: For I 0 To Rs.Fields.Count -1 19: Response.WritequotltTD AlignCentergtltBgtquot amp RsI.Name amp quotlt/Bgtlt/TDgtquot 20: Next 21: Response.Write quotlt/TRgtquot 22: if Not Rs.Eof then 第11章 ADO 对象的基础与应用 313 23: Rs.MoveFirst 24: Do While Not Rs.Eof 25: Response.Write quotltTRgtquot 26: For I0 to Rs.Fields.Count -1 27: Response.Write quotltTdgtquot amp RsI amp quotlt/TDgtquot 28: Next 29: Response.Write quotlt/TRgtquot 30: Rs.MoveNext 31: Loop 32: else 33: Response.Write quot没有相符的信息可供读取quot 34: end if 35: OBJConn.Close 36: Set Rs Nothing 37: Set OBJConn Nothing 38: gt 39: lt/Tablegt 40: lt/BODYgt 41: lt/HTMLgt 程序说明 第15行设置希望执行的SQL Query变量。
第1820行取得字段的名称 第22行如果Recordset对象当前记录指针的位置不是在文件尾即可使用Rs.MoveNext方法逐条移动记录指针。
因此在判断记录指针是否到达文件尾时可以参考以下的设置信息。
表11-3 EOF与BOF属性 属 性 功 能 简 述 BOF 只读属性当前指针是否在记录集合的开头即第一条记录之前 EOF 只读属性当前的指针是否在记录集合的最后即最后一条记录之后
ASP与SQL网站数据库程序设计 314 第2431行利用“Do...Loop”语句作为Recordset对象的有效记录集合范围控制。
第2628行利用“For...Next”循环语句将记录集合中的各个字段内容显示出来。
第30行将有效的记录指针向下移一条记录。
第3537行关闭与数据库的连接同时释放RsOBJConn变量。
11-3-1 取得字段名称与内容 Fields对象属于Recordset对象的Fields数据集合其可以在
ASP程序中取得字段的信息。
常用属性如表11-4所示 表11-4 Fields的
常用属性 属 性 功 能 简 述 Count 取得当前Recordset对象记录集合中的字段数量 Name 取得当前Recordset对象记录集合中的字段名称 Value 取得当前Recordset对象记录集合中的字段内容 Type 取得当前Recordset对象记录集合中字段的数据类型 如果需要取得当前Recordset对象记录集合中的字段数量可以采用如下的程序代码取得 FieldCount Rs.Fields.Count 在上述程序代码执行之后将会取得当前Recordset对象记录集合中的字段数量。
在取得字段数量之后即可根据索引来取得字段的名称、数据类型、长度等信息。
程序代码如下所示 Rs.FieldsI.Name Rs.FieldsI.Value Rs.FieldsI.Type Rs.FieldsI.Attributes Rs.FieldsI.DefinedSize 上述程序的索引变量I是从“0”开始增量为“1”持续累加直到I为“FieldCount - 1”为止依次取得字段的相关信息。
范例程序EX11-03.
asp 第11章 ADO 对象的基础与应用 315 用
ASP程序所创建的Recordset对象打开“产品基本信息”表以
HTML表格形式将表字段名称、内容以及数据类型逐项显示在浏览器上如图11-5所示。
图11-5 取得表的字段名称、字段内容以及数据类型等信息 在上图中可以看到字段的“数据类型”但是这些数据类型全部都以数字形式表示到底这些数字代表什么意义请参考表11-5即可得知。
表11-5 数据类型 数据类型 SQL Server 2000 的数据类型 200 varchar可变长度字符数据类型 131 decimal固定精度和小数位的数字数据 129 Char固定长度字符数据类型 11 Bit1或0的整数数据 程序内容 01: lt-- EX11-03.
asp 取得字段详细信息 --gt 02: ltHTMLgt 03: ltHEADgt 04: ltMETA NAMEquotGENERATORquot ContentquotMicrosoft Visual Studio 6.0quotgt
ASP与SQL网站数据库程序设计 316 05: ltTITLEgtEX11-03.
asp 取得字段详细信息lt/TITLEgt 06: lt/HEADgt 07: ltBODYgt 08: ltTable Border1gt 09: lt 10: On Error Resume Next 11: TableName quot产品基本信息quot 12: Set OBJConn Server.CreateObjectquotADODB.Connectionquot 13: strDSN quotDSNTradeuidtestpwdtest1quot 14: OBJConn.Open strDSN 15: SQLstr quotSelect from quot amp TableName 16: Set Rs OBJConn.Execute SQLstr 17: if Not Rs.Eof then 18: Rs.MoveFirst 19: FdCount Rs.Fields.Count 20: Response.Write quotltTrgtltTd Colspan2gt字段总数lt/TdgtltTd Colspan2gtquot amp FDCount amp quotlt/Tdgtlt/Trgtquot 21: Response.Write quotltTrgtquot 22: Response.Write quotltTdgt字段索引lt/TdgtltTdgt字段名称lt/Tdgtquot 23: Response.Write quotltTdgt字段内容lt/TdgtltTdgt数据类型lt/Tdgtquot 24: Response.Write quotltTdgt字段属性lt/TdgtltTdgt定义长度lt/Tdgtquot 25: Response.Write quotltTdgt实际内容长度lt/Tdgtquot 26: Response.Write quotlt/Trgtquot 27: For I 0 to FdCount - 1 28: Response.Write quotltTRgtquot 29: Response.Write quotltTdgtquot amp I amp quotlt/Tdgtquot 30: Response.Write quotltTdgtquot amp Rs.Fieldsi.Name amp quotlt/Tdgtquot 31: Response.Write quotltTdgtquot amp Rs.Fieldsi.Value amp quotlt/Tdgtquot 32: Response.Write quotltTdgtquot amp Rs.Fieldsi.Type amp quotlt/Tdgtquot 33: Response.Write quotltTdgtquot amp Rs.Fieldsi.Attributes amp quotlt/Tdgtquot 第11章 ADO 对象的基础与应用 317 34: Response.Write quotltTdgtquot amp Rs.Fieldsi.DefinedSize amp quotlt/Tdgtquot 35: Response.Write quotltTdgtquot amp Rs.Fieldsi.ActualSize amp quotlt/Tdgtquot 36: Response.Write quotlt/TRgtquot 37: next 38: else 39: Response.Write quot没有相符的信息可供读取quot 40: end if 41: OBJConn.Close 42: Set Rs Nothing 43: Set OBJConn Nothing 44: gt 45: lt/Tablegt 46: lt/BODYgt 47: lt/HTMLgt 程序说明 第15行产生希望执行的SQL Query内容。
第18行将记录指针移到第一条记录。
第19行设置变量FdCount为“Rs.Fields.Count”字段总数量。
第20行显示“产品基本信息”表中字段的总数。
第30行显示字段的名称。
第31行显示字段的内容。
第32行显示字段的数据类型。
第33行显示字段的属性。
第34行显示字段定义的长度。
第35行显示字段的实际内容长度。
11-3-2 取得、移动记录指针 在Recordset对象取得指定的记录之后通常需要将记录指针移到相应记录上也就是说将表的记录指针移到指定的记录上。
Recordset对象的相关方法如下所示。
ASP与SQL网站数据库程序设计 318 表11-6 方法 方 法 功 能 简 述 MoveFirst 将记录指针移到第一条记录 MoveLast 将记录指针移到最后一条记录 MoveNext 将记录指针移到下一条记录 MovePrevious 将记录指针移到上一条记录 在上述属于Recordset对象的记录浏览方法上可以根据不同的CursorType值从而支持不同的方法这些方法如下所示。
表11-7 不同的值支持不同的方法 CursorType参数 可供使用的方法 adForwardOnly 只适用于MoveFirst以及MoveNext方法 adOpenStatic 支持Recordset对象所有的方法 当然除了记录的浏览方法之外Recordset对象还提供如表11-8所示的属性。
表11-8 Recordset对象的属性 属 性 功 能 描 述 RecordCount 这是一个只读的属性用以返回符合查询条件的记录总数 AbsolutePosition 在数值1到RecordCount之间指定记录指针的位置如果这个数值为负则以“adPosUnkonwn”表示代表没有符合的记录可供读取 上表所示的AbsolutePosition属性可以使用在CursorType的adOpenStatic参数上。
对于adForwardOnly参数它并不支持AbsolutePosition属性。
在Recordset对象的数据集合产生之后用户就可使用Recordset对象所提供的四种方法在与查询条件相符的记录中自由地移动记录指针。
程序范例Ch11-04.
asp 使用Recordset对象取得相符的数据后用Recordset对象的方法在相符的记录集合中移动记录指针如图11-6所示。
第11章 ADO 对象的基础与应用 319 图11-6 移动记录指针范例的执行结果 程序内容 01: lt-- EX11-04.
asp 记录指针移动范例 --gt 02: ltHTMLgt 03: ltHEADgt 04: ltMETA NAMEquotGENERATORquot ContentquotMicrosoft Visual Studio 6.0quotgt 05: ltTITLEgtEX11-04.
asp 记录指针移动范例lt/TITLEgt 06: lt/HEADgt 07: ltBODYgt 08: ltTable Border1gt 09: lt 10: On Error Resume Next 11: TableName quot产品基本信息quot 12: strDSN quotDSNTradeuidtestpwdtest1quot 13: Set OBJConn Server.CreateObjectquotADODB.Connectionquot 14: OBJConn.Open strDSN 16: Set Rs Server.CreateObjectquotADODB.RecordSetquot 17: RS.Open quot产品基本信息quotOBJConn adOpenStatic 19: if Not Rs.Eof then 20: Response.Write quotltTrgtquot 21: Response.Write quotltTdgt产品代号lt/TdgtltTdgt目前状态lt/Tdgtquot 22: Response.Write quotlt/Trgtquot 24: Rs.MoveFirst
ASP与SQL网站数据库程序设计 320 25: Response.Write quotltTrgtquot 26: Response.Write quotltTdgtquot amp Rsquot产品代号quot amp quotlt/Tdgtquot 27: Response.Write quotltTdgt第一条lt/Tdgtlt/Trgtquot 29: Rs.MoveNext 30: Response.Write quotltTrgtquot 31: Response.Write quotltTdgtquot amp Rsquot产品代号quot amp quotlt/Tdgtquot 32: Response.Write quotltTdgt下一条lt/Tdgtlt/Trgtquot 34: else 35: Response.Write quot没有相符的信息可供读取quot 36: end if 37: OBJConn.Close 38: Set Rs Nothing 39: Set OBJConn Nothing 40: gt 41: lt/Tablegt 42: lt/BODYgt 43: lt/HTMLgt 程序说明 第24行将当前的记录指针移动到第一条相符的记录上第26行显示该记录的产品代号。
第29行将当前的记录指针移动到下一条相符的记录上第31行显示该记录的产品代号。
11-3-3 Field对象 Recordset本质上是由字段构成的而字段本身有一些属性Attribute的设置例如字段的大小、数据存放格式、字段名称、字段的外框属性、字段内所存储的内容等。
用户可以使用Field对象字段对象来取得每一个字段内的数据例.