11ADO对象的基础与应用11-1ADO对象的结构11-2Connection对象11-3Rrcordset对象的基础11-4ADO对象与ODBC的应用11-5Error对象ASP与SQL网站数据库程序设计30411-1ADO对象的结构既然ODBC如此方便,那么为什么又要推出新的OLEDB结构呢?ODBC对于SQL的存取使用了C语言接口,而OLEDB则是为COM(ComponentObjectModel)而设计的。因此,对于用户而言,采用OLEDB将会比ODBC的存取效率更高,这就是ASP要构建于OLEDB之上的原因。11-1-1ADO对象面向对象的程序设计概念让程序的编写以模块化方式进行。如此会使程序更有效率,也会因为模块化设计的因素而使得维护工作变得比较容易。数据库的存取将趋于一致性。ADO可以省去不少时间而去学习各种不同的SQL系统。ADO可以将看起来复杂的数据库系统的连接、维护工作变成一件相当容易的事。图11-1ADO对象的结构图11-1-2ADO的结构要创建一个Recordset,必须提供详细的用户识别码、连接密码及想要查询的条件,这样才可以顺利连接到相应的数据库去进行数据的存取操作。例第11章ADO对象的基础与应用305如,用户要从数据库服务器上取得数据,首先必须经过用户帐号及密码的确认,确认无误后才可进一步取得和数据库的连接,这种状态会一直持续到应用程序结束为止。假如用户在任何时候想使用Recordset对象连接到数据库,必须遵照前面连接到数据库的操作。在ADO结构之下,提供了几种对象供程序设计人员应用。它们分别是:Connection对象Recordset对象Command对象Error对象Connection对象%SetOBJConn=Server.CreateObject(“ADODB.connection”)%在这条语句执行之后,实际上尚未连接到任何数据库系统,只能说完成数据库连接前的定义工作,下面将介绍如何连接到数据库系统。11-2Connection对象%SetOBJConn=Server.CreateObject(“ADODB.connection”)%在这个实例执行之后,实际上并未连接到任何数据库系统,只是完成数据库连接前的声明操作,下面主要介绍如何连接到数据库。11-2-1连接、打开数据库的方法OBJConn.openConnectionString,UserID,Password其中ConnnectionString代表一个数据源(DataSourceName,DSN),UserID代表数据库系统授权连接的用户名,Password代表该用户的连接密码,至于数据源请参考ODBC说明。假设系统已经安装了MSSQLServer2000,则可以用以下的范例来连接数据库:%SetOBJConn=Server.CreateObject(“ADODB.Connection”)OBJConn.open“Trade”,“test”,“test1”%ASP与SQL网站数据库程序设计306在此范例中,使用上一章创建的“Trade”数据源。范例程序:EX11-01.asp图11-2与数据库连接成功的范例执行结果图11-3与数据库连接失败的范例执行结果程序内容01:!--EX11-01.asp与SQLServer建立连接--02:HTML03:HEAD04:METANAME=GENERATORContent=MicrosoftVisualStudio6.005:TITLEEX11-01.asp与SQLServer建立连接/TITLE06:/HEAD07:BODY08:%09:OnErrorResumeNext10:TableName=产品基本信息11:SetOBJConn=Server.CreateObject(ADODB.Connection)12:OBJConn.openTrade,test,test1第11章ADO对象的基础与应用30713:ifOBJConn.State=1then14:Response.WriteOBJConn与数据库连接成功15:OBJConn.Close16:else17:Response.WriteOBJConn对象的执行过程产生错误!18:endif19:SetOBJConn=Nothing20:%21:/BODY22:/HTML程序说明第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连接%SetOBJConn=Server.CreateObject(ADODB.Connection)OBJConn.OpenDriver={SQLServer};Database=数据库名称;Server=服务器IP;UID=帐号;PWD=密码%ASP与SQL网站数据库程序设计30811-2-3直接与AccessMDB连接程序内容%Connection.Opendriver={MicrosoftAccessDriver(*.mdb)};”&_“dbq=e:\PWS\PWS.mdb%或是%Connection.Opendriver={microsoftaccessdriver(*.mdb)};”&_“dbq=&server.mappath(pws.mdb)%上述范例的第二种方法使用“server.mappath(pws.mdb)”打开数据库,此方法可将Access数据库直接放在网站的ASP执行目录中存取。因其不使用ODBC就可打开数据库,因此适用于免费网站。此种方法也有助于隐藏ODBC的连接,不易被窃取ODBC的路径信息。11-3Recordset对象的基础Recordset对象的属性如表11-1所示。表11-1Recordest对象的属性说明属性说明AbsolutePage设置当前记录所在位置是第几页AbsolutePosition设置记录集对象所在位置是第几条记录ActiveConnection设置记录集属于哪一个Connection对象BOF检验当前记录集对象所指位置是否在第一条记录之前,若成立,则返回True,否则返回False第11章ADO对象的基础与应用309续表属性说明EOF检验当前记录集对象所指位置是否在最后一条记录之后。若成立,则返回True,否则返回FalseCacheSize设置记录集对象在内存中缓存的记录数Cousor设置记录集对象的光标类型,共分为四种,分别为Dynamic,Static,Forward-only,KeysetEditMode指定当前是否处于编辑模式LockType在记录集的当前位置锁定记录PageSize设置记录集对象一页所容纳的记录数PageCount显示记录集当前的页面总数Recordset对象的方法如表11-2所示。表11-2Recordset对象的方法方法说明AddNew添加一条空白记录CancelBatch取消一个批处理更新操作CancelUpdate取消已存在的和新的记录所做的任何改变Close关闭打开的记录集GetRows取得记录集的多条记录Movefirst将RS记录集对象的指针移至记录集对象中最顶端的记录Moveprevious将RS记录集对象的指针向上移动一条Movenext将RS记录集对象的指针向下移动一条Movelast将RS记录集对象的指针移至记录集对象中最底端的记录Open打开一个记录集Requery重新执行查询Update向数据库提交对一条记录的改变或添加Fields.count显示该记录集对象内所含有的字段数ASP与SQL网站数据库程序设计310Recordset对象可以创建一个记录集合,并且将所需的记录从表中取出,同时,使用虚拟表格的方式,每一行为一条记录,每一列则代表一个字段,提供给ASP程序处理,如下所示。分类编号产品代号产品名称产品简述550001000001LA-GearMousePADMODELNo.TMP–0312550001000002LA-GearMousePAD1MODELNo.TMP–04Recordset中的记录指针具有游标类型(CursorType)。不同的游标类型,可对记录集进行不同的操作,默认值为0,代表记录指针只能向前移动记录集,也可定义成其他值,允许记录指针在记录集中上下移动。数据源本身具有锁定的能力(LockType)。具有这项功能最主要的目的在于避免两个SQLQuery操作同时写同一条记录。当前记录指针的位置:Recordset的MoveFirst方法可以将记录指针移到第一条记录的位置,MoveLast方法可将记录指针移到记录集合的最后一条,MoveNext方法可使指针移到下一条,MovePrevious方法则是移到上一条。Recordset对象在使用前同样需要使用Connection对象建立数据库的连接,其步骤如下所示:(1)创建Connection对象,打开数据源。首先需要创建一个Connection对象,并保存在OBJConn变量中,然后打开数据源,程序代码如下所示:SetOBJConn=Server.CreateObject(ADODB.Connection)OBJConn.OpenstrDSN'打开数据源(2)创建Recordset对象。在取得与数据库的连接之后,接着即可创建Recordset对象,其程序代码如下所示:SetRs=OBJConn.Execute(SQLstr)(3)打开Recordset取得数据。在Recordset对象创建完成之后,即可打开Recordset对象的内容。此Recordset对象的内容可以是表、SQL查询语句,如果是表,其命令如下所示:Rs.Open产品基本信息,OBJConn,adOpenStatic,adLockReadOnly,记录指针第11章ADO对象的基础与应用311adCmdTable或是SetRs=OBJConn.Exceute(CommandText,RecordsAffected,Options)上述程序代码使用Recordset对象Rs的Open方法打开“产品基本信息”表,第二个参数为Connection对象OBJConn,后面三个参数为定义在文件adovbs.inc中的常数,定义Recordset对象的存取方式。(4)处理Recordset对象的记录。在打开Recordset对象的记录集合之后,即可开始使用Recordset对象的属性及方法,进行表的操作或取得当前的状态。例如:取得Recordset对象的状态属性State,如下所示:IfRs.State=1ThenResponse.Write(bRs对象目前处于打开的状态/bbr)ElseResponse.Write(bRs对象目前处于关闭的状态/bbr)EndIf上述程序代码是利用“If...Then...Else”语句的方式,检查状态属性State,查看当前Recordset对象的打开状态。如果返回值为“1”,则代表状态已打开,返回值为“0”则代表状态已关闭。(5)关闭Recordset对象。Rs.CloseSetRs=Nothing在执行上述程序代码之后,将会关闭Recordset对象,并且由“SetRs=Nothing”释