WEB数据库访问新_第1页
WEB数据库访问新_第2页
WEB数据库访问新_第3页
WEB数据库访问新_第4页
WEB数据库访问新_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第8章章 WEB数据库访问数据库访问1、 WEB数据库访问技术数据库访问技术 CGI(Common Cateway Interface)技术)技术 CGI是通用网关界面,是最早的访问数据库的解决方案。CGI程序可以建立网页与数据库之间的连接,将用户的查询要求转换成数据库的查询命令,然后将查询结果通过网页返回给用户。一个CGI工作的基本原理如图1-5所示。 HTTP请求 CGI标准的客户机数据 数据库访问请求 HTML格式请求结果 CGI标准的返回结果 数据库访问结果 本质上CGI是Web服务器端的一个进程,可以作为Web服务器与其他应用程序、信息资源和数据库之间的中介器。通过CGI接口标准,

2、Web服务器可以调用一个CGI程序,同时将用户指定的数据传给予它,随后,该CGI程序根据传入的数据做相应的处理,这种处理当然也可以是数据库访问处理,最后Web服务器再将程序的处理结果返回到Web浏览器。CGI程序可以用许多程序设计语言来编写,常用的编程语言有C语言、Perl、VB等。Web浏览器Web服务器CGI程序数据库 ASP与与ADO(ActiveX数据对象):数据对象): 这是一种完全的这是一种完全的WEB数数据库访问解决方案。据库访问解决方案。ADO是微软提供的可对各种类型数据库是微软提供的可对各种类型数据库进行操作的最简单、最有效和功能最强大的方法。进行操作的最简单、最有效和功能最

3、强大的方法。ADO是是ASP内置的重要组件,用户安装内置的重要组件,用户安装ASP的同时,的同时,ADO组件就已组件就已经被安装了,经被安装了,ADO是是ASP推荐的访问数据库的方式。在需要推荐的访问数据库的方式。在需要提供高性能、高可靠性的远程数据访问时,提供高性能、高可靠性的远程数据访问时,RDS是更为理想是更为理想的选择。的选择。ADO可以使用不同的数据接口访问数据库。可以使用不同的数据接口访问数据库。 JSP,PHP2、常用的数据库接口技术、常用的数据库接口技术ODBC开放式的数据库连接,是开放式的数据库连接,是Microsoft Windows 开放服务体系(开放服务体系(WOSA)

4、的一部分,是数据库访问的标准接)的一部分,是数据库访问的标准接口。它建立一组规范,并提供一组对数据库访问的标准口。它建立一组规范,并提供一组对数据库访问的标准API(应用程序编程接口),使应用程序可以应用(应用程序编程接口),使应用程序可以应用ODBC提供的提供的API来访问任何带有来访问任何带有ODBC驱动程序的数据库。驱动程序的数据库。ODBC已经成已经成为一种标准,是作为一种标准的基于为一种标准,是作为一种标准的基于SQL的接口而实现的,的接口而实现的,主要用于处理关系型数据库,可以很好地用于关系型数据库主要用于处理关系型数据库,可以很好地用于关系型数据库的访问。目前所有关系数据库都提供

5、的访问。目前所有关系数据库都提供ODBC驱动程序,但驱动程序,但ODBC对任何数据源都未作优化,这也许会对数据库存取速对任何数据源都未作优化,这也许会对数据库存取速度有影响;同时由于度有影响;同时由于ODBC只能用于关系数据库只能用于关系数据库,使得很难,使得很难利用利用ODBC访问对象数据库及其他非关系数据库。访问对象数据库及其他非关系数据库。 推出推出ODBC之后,微软又推出了之后,微软又推出了OLE DB。OLE DB是一个是一个底层的数据访问接口,它基于底层的数据访问接口,它基于COM接口(组件对象模型)。接口(组件对象模型)。OLE DB对所有文件系统包括对所有文件系统包括关系数据库

6、和非关系数据库关系数据库和非关系数据库都提都提供了统一的接口。如可以访问非关系型数据库和其他的一些资供了统一的接口。如可以访问非关系型数据库和其他的一些资源,像源,像Excel电子表格中的数据、访问电子邮件等。电子表格中的数据、访问电子邮件等。 OLE DB标准的具体实现是一组标准的具体实现是一组C+ API函数,就像函数,就像ODBC标准中的标准中的ODBC API一样,不同的是,一样,不同的是,OLE DB的的API是是符合符合COM标准、基于对象的标准、基于对象的API,ODBC API则是简单的则是简单的C API。 OLE DB分两种:直接的分两种:直接的OLE DB和面向和面向OD

7、BC的的OLE DB,后者架构在后者架构在ODBC上。上。这些特性使得这些特性使得OLE DB技术比技术比ODBC技术更加优越。现在微技术更加优越。现在微软已经为所有软已经为所有ODBC数据源提供了一个统一的数据源提供了一个统一的OLE DB服务程服务程序,叫做序,叫做ODBC OLE DB Provider。 同时其他的数据库接口还有同时其他的数据库接口还有SUN公司的公司的JDBC-Java Database Connectivity(Java数据库连接数据库连接)、JDBC-ODBC bridge。它们主要应用用于。它们主要应用用于Java程序和程序和JSP程序(是基于程序(是基于JAV

8、A的技术,的技术,JSP与与ASP都是动态网页编程语言,但都是动态网页编程语言,但JSP使用类似于使用类似于HTML的标识和的标识和JAVA代码片段而不使用代码片段而不使用VBScript)中,前者可用于访问提供)中,前者可用于访问提供JDBC驱动程序的数驱动程序的数据库,而后者可访问所有带有据库,而后者可访问所有带有ODBC驱动程序的数据库。驱动程序的数据库。3、OLE DB与与ODBC在连接数据库时的区别在连接数据库时的区别(详见详见4 的图的图) 值得注意的是,值得注意的是,OLE DB对对ODBC的兼容性,即允许的兼容性,即允许OLE DB访问现有的访问现有的ODBC数据源。其优点很明

9、显,由于数据源。其优点很明显,由于ODBC相对相对OLE DB来说使用得更为普遍,因此可以获得的来说使用得更为普遍,因此可以获得的ODBC驱动程驱动程序相应地要比序相应地要比OLE DB的要多。这样不一定要得到的要多。这样不一定要得到OLE DB的的驱动程序,就可以立即访问原有的数据系统。驱动程序,就可以立即访问原有的数据系统。 提供者位于提供者位于OLE DB层,而驱动程序位于层,而驱动程序位于ODBC层。如果层。如果想使用一个想使用一个ODBC数据源,需要使用针对数据源,需要使用针对ODBC的的OLE DB提提供者,它会接着使用相应的供者,它会接着使用相应的ODBC驱动程序。如果不需要使用

10、驱动程序。如果不需要使用ODBC数据源,那么可以使用相应的数据源,那么可以使用相应的OLE DB提供者,这些通提供者,这些通常称为本地提供者(常称为本地提供者(native provider)。)。 可以清楚地看出使用可以清楚地看出使用ODBC提供者意味着需要一个额外的提供者意味着需要一个额外的层。因此,当访问相同的数据时,针对层。因此,当访问相同的数据时,针对ODBC的的OLE DB提供提供者可能会比本地的者可能会比本地的OLE DB提供者的速度慢一些。提供者的速度慢一些。4、使用、使用ActiveX数据对象(数据对象(ADO) ADO是一个是一个OLE DB使用者,它提供了对使用者,它提供

11、了对OLE DB数数据源的应用程序级访问。用来同新的数据访问层据源的应用程序级访问。用来同新的数据访问层OLE DB Provider一起协同工作。它是一个应用程序层次的界面,一起协同工作。它是一个应用程序层次的界面,与数据库通信时还是用与数据库通信时还是用OLE DB。ADO封装了封装了OLE DB中中使用的大量使用的大量COM接口,对数据库的操作更加方便简单。接口,对数据库的操作更加方便简单。 在在ASP中,如果不作说明,使用中,如果不作说明,使用ADO访问数据库将访问数据库将默默认认为为OLE DB的的ODBC驱动程序驱动程序,当然也可通过,当然也可通过OLE DB的其他数据库驱动程序直

12、接绑定到指定的数据库。下图是的其他数据库驱动程序直接绑定到指定的数据库。下图是使用使用ADO访问数据库的模式访问数据库的模式: 数 库 数据提供者 者ADO OLE DB OLE DB的ODBC驱动程序ODBC的数据库驱动程序OLE DB的其他数据库驱动程序MAILGraph等非 关 系型数据SQLServer、Oracle、AccessFoxPro等关系型数据库5、ODBC 通常每种数据库都提供了自己的编程接口,为此微软通常每种数据库都提供了自己的编程接口,为此微软开发了用于开发数据库系统应用程序的编程接口规范开发了用于开发数据库系统应用程序的编程接口规范(API),即),即ODBC,ODB

13、C是目前最流行的连接数据源的是目前最流行的连接数据源的方法之一。无论对于本地数据库还是方法之一。无论对于本地数据库还是C/S或或B/S数据库管理数据库管理系统,只要系统中有相应的系统,只要系统中有相应的ODBC驱动程序,都可以通过驱动程序,都可以通过ODBC与之连接并访问数据库中的信息。与之连接并访问数据库中的信息。ODBC的作用可用的作用可用下图表示:下图表示: 要与要与ODBC兼容的数据库进行连接,必须建立一个称为兼容的数据库进行连接,必须建立一个称为Data Source Name(DSN,数据源名数据源名)的数据源。)的数据源。应用程序ODBC接口数据库使用使用ODBC连接数据库时,提

14、供了三种连接数据库时,提供了三种DSN:用户:用户DSN、系统、系统DSN、文件、文件DSN。用户用户DSN:只能以指定的用户安全身份证明连接指定的数据库。系统系统DSN:所有用户都能够连接指定的数据库。文件文件DSN:将连接的情况存储在一个文件(*.dsn)中,只有对该文件有访问权限的用户才能够连接指定的数据库。 用户与系统DSN信息存储在Windows注册表中。在网络上,为了让所有用户通过为了让所有用户通过ODBC访问数据库,需要创建系统访问数据库,需要创建系统DSN。5.1 创立并配置数据源创立并配置数据源 ODBC数据源的设置非常简单,因为它提供了图形化的用户数据源的设置非常简单,因为

15、它提供了图形化的用户界面。界面。 步骤步骤:(1)在)在Windows9x操作系统中,通过操作系统中,通过【控制面板控制面板】中的中的【ODBC选项选项】启动设启动设置对话框置对话框; 在在Windows2000操作系统中,双击操作系统中,双击【控制面板控制面板】的的【管理工具管理工具】图标,在打图标,在打开的开的【管理工具管理工具】中双击中双击“数据源数据源(ODBC)”图标图标.(2)窗口中双击)窗口中双击【数据源(数据源(ODBC)】图标,启动设置对图标,启动设置对话框,如下图所示。话框,如下图所示。选择选择系统系统DSN选项卡选项卡,进入设置系统,进入设置系统DSN的操作界面。的操作界

16、面。在该窗口的在该窗口的“系统数据源系统数据源”列表框列表框中显示该系统中已安装中显示该系统中已安装的的ODBC数据源的有关信息。当要建立的数据源不存在时,数据源的有关信息。当要建立的数据源不存在时,就可以单击就可以单击“添加添加”按钮添加需要的数据源;也可选中一按钮添加需要的数据源;也可选中一个数据源后按个数据源后按“配置配置”,对已存在的数据源进行重新设置。,对已存在的数据源进行重新设置。(3)单击)单击“添加添加”按钮,将出现如下图所示的按钮,将出现如下图所示的“创建新数据创建新数据源源”对话框。对话框。这个对话框是用来选择新建的数据源所使用的驱动程序的,这个对话框是用来选择新建的数据源

17、所使用的驱动程序的,对于访问对于访问SQL Server2000数据库的数据源来说,应该如上图数据库的数据源来说,应该如上图所示选择所示选择SQL Server驱动程序。然后单击驱动程序。然后单击“完成完成”按钮,出按钮,出现下图所示的现下图所示的“建立新的数据源到建立新的数据源到SQL Server”对话框。对话框。在名称一栏为数据源设置一个名称在名称一栏为数据源设置一个名称“学生学生”,以后在,以后在ASP程序程序中可以通过这个名称来连接指定的数据库;在中可以通过这个名称来连接指定的数据库;在“服务器服务器”下拉下拉式列表框中选择或键入式列表框中选择或键入SQL Server数据库服务器的

18、名称数据库服务器的名称(或或IP地址地址)。输入输入ODBC数数据源的名称据源的名称(DSN)(4)单击)单击“下一步下一步”后对话框如图所示。在图中,选择后对话框如图所示。在图中,选择“使使用用户输入登录用用户输入登录ID和密码的和密码的SQL Server验证验证“方式。方式。单击该按钮单击该按钮,若窗口若窗口显示显示”测试成功测试成功”,表示该数据源可以表示该数据源可以使用使用.6、使用、使用ADO访问数据库访问数据库 ADO把绝大部分的数据库操作封装在其内部的七个对象中,在ASP网页中可以通过对这些对象的调用方便地完成相应的数据库操作。在ASP中通过ADO访问SQL Server数据库

19、来生成动态网页是核心内容之一。其流程可用图来描述。用户浏览ASP网页ADO对象OLE DB数据库OLE DB用来连接各种用来连接各种不同的数据库不同的数据库,开发者不需要确切地了解OLE DB的内部结构,只需知道如何利用它去连接数据库即可。6.1 ADO对象的结构 ADO具有七个对象,分别是:具有七个对象,分别是: Connection对象(连接对象)对象(连接对象):是ADO的首要对象,用来建立数据源与ADO程序之间的连接。对数据源的任何操作都需要建立一个connection对象。 Command(命令对象)(命令对象):负责对数据库提出请求。一般采用SQL语句,该对象有强大的数据库访问能力

20、,既可以完成对数据库的插入、删除和更新等无需返回结果的操作,也可使用Select语句返回一个记录集。 Recordset(数据集对象)(数据集对象):实际上是依附于Connection对象和Command对象的,用来操作数据库内的数据,即管理某个查询返回的记录集。 Parameter(参数对象):用来描述command对象的命令参数。 Property(属性对象):表示ADO的各项对象属性值。 Field(域对象、字段对象):用来表示RecordSet对象的字段。 Error(错误对象):用来描述连接数据库时发生的错误。ADO还提供了四个数据集合:还提供了四个数据集合: Properties集

21、合:Connection, Command, Recordset和Field对象都具有的集合,它包含所有属于各个包含对象的Property对象。 Parameters集合:Command对象具有的集合。 Fields集合:Recordset对象具有的集合。 Errors集合:Connection对象具有的集合。虽然ADO组件提供了7个对象和个对象和4个数据集合个数据集合,但在实际应用中,最常用的对象只有3个:connection,recordset 和command对象。6.1.1 使用使用Connection对象对象 Connection是网页通过ADO存取数据源的重要对象,负责与数据源的连

22、接动作负责与数据源的连接动作,其他的几个对象都必须依赖Connection对象的连接才能发挥作用。 Connection对象是用来建立和管理应用程序与数据源之间的连接,通过通过connection对象属性和方法的调用对象属性和方法的调用,可以打开、关闭与数据库的连接打开、关闭与数据库的连接,并通过适当的命令执行指定的查询等。1、建立、建立Connection对象对象 要想使用connection对象,必须首先建立它。建立建立connection对象实例对象实例的方法如下:Dim ConnSet Conn=Server.CreateObject(“ADODB.Connection”) 建立建立C

23、onnection对象实例对象实例后,可通过这个对象实例访问Connection对象提供的方法和属性。2、使用、使用connection对象建立与数据源的连接对象建立与数据源的连接 使用Server.CreateObject(“ADODB.Connection”)建立一个Connection对象后,这个对象还没有任何作用,它还必须它还必须和一个确定的数据库连接起来。和一个确定的数据库连接起来。 Connection对象的Open方法方法用来建立与数据源的连接建立与数据源的连接,通常Open方法有以下三种使用方法:(1)使用)使用DSN(Data Source Name 数据源名称)数据源名称)

24、 当程序启动定义于某一DSN的数据库时,系统会根据该DSN的定义找到相应的ODBC驱动程序及数据库,并加以启动。 首先首先按上述方法建立一个系统数据源(建立一个系统数据源(DSN);按步骤完成后,在ASP程序中指定DSN,如下所示: Open方法的连接字符串需包括3个部分的信息个部分的信息:yourdsnname 指明要连接的数据源名(DSN)username 是建立连接时建立连接时用来连接数据源的用户名连接数据源的用户名password 表示连接用户的密码。在在=的前后不的前后不要包含空格要包含空格例:优点优点: 稳定与安全性相对比较好,DSN中可以设置一个与数据库本身名字不同的数据源名,比

25、如数据库名字为student,数据源名字为sjy,这样可以有效地防止由于源程序泄露而可能出现的数据库被窃取;代码简单,不易出错。缺点缺点: 表现在不方便移植,如果程序移植到另外的服务器上,则需要重新设置数据源。或将DSN、用户名和口令直接作为连接对象的参数: 除了以上这种方式和数据源建立连接之外,还可利用Connection对象的ConnectionString属性属性来与数据源建立连接,这是另外一种使用Open方法的方式,如:(2) 直接指定直接指定ODBC参数(参数(DSN-less connection) 这是一种通过在在ASP文件里直接指定数据库文件所在的位置文件里直接指定数据库文件所

26、在的位置,而无需建立无需建立DSN的方法的方法。如下所示:% set conn=server.createobject(“ADODB.connection”) conn.open“Driver=SQL Server;Server=servername;UID=sa;PWD=215503;” & “Database=student”该方法使用到的连接参数说明如下: Driver:指定要访问的数据库的ODBC驱动程序驱动程序的名字,Microsoft SQL Server使用SQL Server。 Server:指定数据源服务器的名称(它的IP地址)或为Local(假如SQL Server

27、位于WEB服务器上)。 Database: 指定要连接的数据库名称。 由于要打开的是Access类型的数据库,所以参数driver应设置为Microsoft Access Driver(*.mdb),这表示要通过Access的ODBC的驱动程序来存取数据库,除了driver这个参数外,dbq参数参数则用来指定欲打开的数据库文件,它必须是完整的路径名称完整的路径名称,所以使用server.mappath这个方法来取得guestbook.mdb完整的路径名。也可直接设定Access数据库的真实路径文件名。优点优点:方便程序移植,不用在服务器上设置数据源,比较适合于远程服务器使用;缺点缺点:安全性较

28、差,如果源程序泄露,则数据库的名称和位置就暴露.那么我们怎样才能知道ODBC驱动程序正确的字符串驱动程序正确的字符串呢?下面介绍一种获得这个字符串的方法:(1)启动“控制面板”的“管理工具”的“数据源(ODBC)”。(2)然后弹出一个对话框“ODBC数据源管理器”。在这个对话框中选取“驱动程序”选项,出现如下图所示的对话框。 从这个对话框,可以找到所有安装于系统的ODBC的驱动程序。(3)直接连接数据库者)直接连接数据库者 (或或OLE DB connection) 从本质上说,前面两种方法即: 使用使用DSN (或(或System DSN) 和直接指定直接指定ODBC参数(或参数(或DSN-

29、less Connection) 都是通过 ODBC 与数据库进行连接的,它们之间区别不大。 也可绕过ODBC,可使用直接通过OLE DB访问数据库的方法。一般来讲这种方法速度更快。如:% set con=server.createobject(“ADODB.connection”) con.open Provider=SQLOLEDB.1;Uid=sa;Pwd=;Database=stu;Server=(local); 该方法用到的连接参数说明如下: Provider:指明用于连接的提供者的名称。 Microsoft SQL Server使用SQLOLEDB.1 Database: 指定要连

30、接的数据库名称。 Server:指定数据源服务器的名称。 若访问Access数据库数据库, OLE DB链接字符串为: 总之,上面详述了ADO连接数据库通常使用的三种方法。在实际工作中只需熟练一种操作方法即可。3、关闭与数据源的连接、关闭与数据源的连接 当与数据源的连接完成任务后,应用Close方法关闭与数据源的连接,释放与该连接有关的系统资源。 注意调用Close方法只是释放与该连接有关的系统资源,而该连接对象connection本身还没有释放。所以一个关闭的Connection对象还可以继续使用Open 方法打开连接,而不再需要重新创建一个Connection对象。 如果使用Close方法

31、关闭连接后,要释放connection对象本身,需给已建立的对象赋值Nothing,使Connection对象彻底从内存中清除。 当Connection对象赋值Nothing后,如还需继续使用Connection对象,则必须使用Server.CreateObject方法重新创建一个。4、使用、使用Connection对象执行对象执行SQL查询查询 Connection对象不只能够建立或者关闭同数据源的连接不只能够建立或者关闭同数据源的连接,还可使用Execute方法方法将命令发布到数据源,如执行执行SQL查询查询命令命令。Execute方法的语法如下:Connection.Execute Co

32、mandText, RecordsAffected, Option 其中:CommandText 参数表明要执行的SQL语句。RecordsAffected 参数表示对数据库提出请求时,所返回或者影响的记录数,其默认值为0,表示每个满足条件的记录都会受到影响。Option 参数用来指定CommandText串的类型,即对数据库请求的类型,可优化执行性能。系统提供如下Option常量参数:AdCMDTable:表示您所指定的CommandText参数是表示一个存在的表的名字。参数值为2.AdCMDText表示指定的CommandText参数是一般的命令类型。参数值为1。AdCMDUnknown

33、表示所指定的CommandText参数类型无法确定,系统将以此作为默认值。参数值为-1。 另外Execute方法的调用分有括号有括号和无括号无括号两种形式。前者用来执行有返回结果的SQL语句,后者用来执行一个无返回结果的语句。例:用SQL Server2000创建一个学生库,其中有一个表,表名为:student。read from 学生库5、设置连接数据源与执行、设置连接数据源与执行SQL指令的等待时间指令的等待时间 有时在连接某个ODBC数据源的时候, 由于网络繁忙或暂时中断,可能造成长时间无法同数据源建立连接或者不能成功提交指令,这时可通过设置connection对象的以下两个属性来决定最

34、长等待时间: ConnectionTimeout属性,单位为秒,设置设置Open方法与数据库方法与数据库连接时的最长等待时间连接时的最长等待时间,默认值是默认值是15秒秒。若设为0的话,表示系统将会一直等到连接成功为止。注意:该属性的设置必须在连接前或者取消连接后进行,因为在连接成功后,这个属性就成为只读,语法如下:connection.connectiontimeout=seconds CommandTimeout属性,单位为秒,设置设置Execute方法运行的方法运行的最长执行时间最长执行时间,默认值为默认值为30秒秒。设为0表示系统会一直等到运运行结束行结束为止。同样,该属性必须在运行S

35、QL指令之前,运行中这个属性是只读的,语法如下:mandtimeout=seconds6、改变默认数据库、改变默认数据库 通常,在一个服务器上同时有多个数据库,在设定ODBC数据源的时候,一般可指定连接到这个服务器时的默认数据库,这样连接之后就可对这个数据库进行操作。同样,在Connection对象中也有一个DefaultDatabase属性,通过设置它可以确定或者改变默认的数据库,其语法如下:Connection.DefaultDatabase=“ DatabaseName”另外还有ConnectionString 属性,用来建立与数据源的连接,其它属性6.1.2 使用使用Recordset

36、(记录集)对象(记录集)对象 Recordset对象有访问数据库的十分强大的功能,如负责浏览和操作从数据库中取出来的数据浏览和操作从数据库中取出来的数据。所有的Recordset对象都是通过记录和字段记录和字段构造的,通过Recordset对象可对数据进行操作,但在任何时候,Recordset对象所指的当前记录均为记录集内的单个记录。 Recordset对象具有较多的属性和方法,可以方便地操纵记录集数据。本节根据实际应用来介绍Recordset的常用属性和方法。1、创建、创建Recordset对象对象 主要有两种方法两种方法来创建Recordset对象:(1)先创建Connection对象,然

37、后使用该对象的Execute()方法,当用Execute()方法从一个数据库返回查询结果时,一个Recordset对象会被自动创建。如: set conn=server.createobject(“ADODB.connection”)conn.open “DSN=学生;UID=sa;PWD=sa” set rs=conn.execute(“select * form student”)将创建含有数据表student中所有记录的Recordset对象rs。该方法所建立的Recordset对象rs中的当前记录只能只能向下移向下移,且rs是只读的,显然当我们需要定位某一记录时,这种rs就不符合要求了

38、。(2)直接使用Recordset对象本身提供的功能来创建一个Recordset对象. 在实际使用中,可以在不先创建Connection对象的情况下直接使用Recordset对象的功能来创建Recordset对象。 此时ADO将自动创建所需的Connection对象,但需在随后的需在随后的Recordset对象的对象的Open方法中给方法中给出一个连接源。出一个连接源。如: set rs=Server.CreateObject(“ADODB.Recordset”) rs.Open “Select * from student”,”DSN=学生;UID=sa;PWD=sa”,cursortype

39、, locktype其中,第一参数指定数据源指定数据源,可以是SQL语句语句、表名、存储过程调用名;第二个参数用来指定与数据库的连接信息指定与数据库的连接信息,可以是Connection对象名或是一个包含“数据库连接信息(ConnectionString)”的字符串参数;第三个参数指记录集中的游标类型游标类型,第四个参数指锁定类锁定类型型。当你打开一个记录集时,如果这个记录集不为空的话,则当前的记录指针指向第一条记录,可以使用BOF和EOF来检测是否有记录: 当记录指针指到记录集尾时,rs.eof设置为“真”;当记录指针指到记录集头时,rs.bof设置为“真“。2、读取记录数据、读取记录数据

40、记录集对象的数据结构同表一样,由记录行(row) 和字段(Field)构成,而一个记录是若干字段的集合,故读取记录数据即为对字段的访问。 Recordset的字段是用Recordset的Fields集合集合表示的,Recordset对象的每一行是一个Fields集合,而Fields集合的每一个项目是一个Field对象对象。 对于Recordset对象,字段名和字段的顺序号均可识别一个字段,如student表的第一个字段的字段名为num,第二个字段的名字为name,其字段的顺序号则0和1。故要访问Recordset对象rs的字段,既可通过字段名字段名也可通过字段的顺字段的顺序号序号。如要访问re

41、cordset对象rs的字段num的值,可用以下几种表达式: rs(“num”) rs.Fields.Item(“num”) rs(0) rs.Fields.Item(0) rs.Fields(“num”) rs.Fields(0) 注意:注意:rs(0)不是表示记录集中的第一个记录,而是表示该记录集中的第一个域(字段)第一个域(字段)。当不知道一个记录集中的字段名时,通过顺序号指定一个字段是有用处的。如将上例中(即输出student表中所有记录)输出字段名改成本节介绍的方法。文件名为stud.asp。read from 学生库 fileds.count属性是记录集的 字段数 显示字段名 显示

42、字段的值或用 由于value为Fields集合默认的属性,可不写。在浏览器中,stud.asp的执行结果如下图所示,显示了数据表student中的全部内容和字段名。其中用到了fields数据集合,count属性用来返回该记录集中的域的数目,name属性用来返回每个域的名字。3、移动记录指针的方法(遍历记录集遍历记录集) 虽然任何时候只能对记录集中的当前记录数据进行操作,但可使用Recordset对象的一组移动方法进行当前记录的重定位,以达到遍历记录集的目的。这组移动方法是: (1)Move Numrecords,start 在记录集中向前或向后移动指定数目的记录; (2)MoveFirst 移

43、动至记录集中的第一条记录; (3)MoveNext 移动至当前记录的下一条记录; (4)MovePrevious 移动至当前记录的上一条记录; (5)MoveLast 移动至记录集中的最后一条记录。 记录集的移动方法使用时还取决于记录集游标的类型记录集游标的类型,不能任意使用。记录集的游标就是该记录集属性的标志记录集属性的标志。游标的性质决定了可以对记录集进行何种移动可以对记录集进行何种移动,还决定了其他用户可以对一个记录集进行什么样的改变。 记录集的游标类型属性在记录集打开时指定在记录集打开时指定,共有四种类型的游标: adOpenFowardOnly: 前向游标,只能在记录集中向下移动,值

44、为值为0,只读。在默认情况下在默认情况下,打开一个记录集时均用前向游标打开它,这意味着只能用MoveNext方法在记录间移动。直接用Command对象或Connection的Execute方法创建的游标就属于该类游标。 adOpenKeyset: 关键集游标,可以在记录集中向下或向上自由移动。如果一个用户更新一条记录,记录集将反映这个变化;但若增加或删除一条新记录,新记录不会出现在记录集中。值为值为1, 可读写。 adOpenDynamic: 动态游标,可在记录集中向下或向上自由移动。其他用户造成的记录的任何变化都将在记录集中有所反映。可看到他人新增记录。值为值为2,可读写。该游标功能强大,但

45、消耗资源大。 Dynamic游标可以看到它们保存记录集合的所有变化。使用Dynamic游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。 adOpenStatic: 静态游标,可在记录集中向下或向上自由移动。其他用户造成的记录变化不在记录集中体现。值为值为3,只读。 要用一种特定的游标打开记录集,必须显式地创建显式地创建这个记录集,然后再用该游标类型打开它。 要做到这点(第二种方法): 首先要创建记录集对象的一个实例,然后用open方法,通过一个连接和一种游标类型,打开这个

46、记录集。 如:set rs=Server.CreateObject(“ADODB.Recordset”)rs.Open “Select * from student”,”DSN=学生;UID=sa;PWD=sa”, cursortype, locktype 打开记录集时,也可以指定锁定类型。锁定类型属性是Recordset对象中的又一个重要属性,为可选项为可选项。 锁定类型决定了当不止一个用户同时试图改变一个记录时,数据库应如何处理。即如何确保数据的完整性,确保更改不会被覆盖 。 需要避免的典型情况是多次更新, 比如一个用户改动了一些数据,接着另一个用户立即又将其做了修改。为了避免这种情况发生

47、,就要锁定记录。有下面的四种锁定类型: l adLockReadOnly: 值为1,默认值,指定记录集中不能修改的记 adLockPessimistic:值为2,悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。只能同时被一个客户修改,完毕后释放。 adLockOptimstic:值为3,乐观锁定,指定只有调用记录集的Update方法时,才锁定记录。可以同时被多个客户修改。 adLockBatchOptimistic: 值为4,批次乐观锁定,同时更新多笔数据时,暂不将更新数据存入数据库,而是暂存在缓冲区中,等待UpdateBatch调用后才将

48、数据一次性写入数据库。指定记录只能成批地更新。数据可以修改,但不锁定其他客户。 如:set conn=server.createobject(“ADODB.connection”)set rs=Server.CreateObject(“ADODB.Recordset”) conn.open ”DSN=学生;UID=sa;PWD=sa” rs.Open “Select * from student”, conn, 3, 1 只读,当前记录可 自由移动 rs.Open “Select * from student”, conn, 2, 3 可新增、修改、或删除,当前记录可自由移动,乐观锁记录集对象

49、还有许多属性,对遍历记录集很有用处。如: AbsolutionPosition: 设置或读取当前记录在记录集中的位置顺序号。 BOF:表示记录集的开头,位于第一条记录之前 。 EOF:表示记录集结尾,位于最后一条记录之后 。 RecordCount: 表示记录集中的记录总数。不过,recordcount并不总是有效的。在很多时候,当记录集非空时, rs.recordcount会被设置为-1,即ADO无法判断记录总数。这和打开记录集时的方式打开记录集时的方式有关:当使用adForwardOnly光标时,该属性无效(-1)。例如,想在一个记录集中反向移动,可以使用MoveLast和MovePrev

50、ious方法以及BOF属性。见下例:backwards recordset% set conn=server.createobject(ADODB.connection) set rs=server.createobject(ADODB.recordset)conn.open DSN=学生;UID=sa;PWD=sastr=select * from studentrs.open str,conn,adOpenstatic /静态游标 3rs.movelastwhile not rs.BOF response.write( & rs(姓名) rs.moveprevious wend r

51、s.closeconn.close %在这个例子中,用静态游标打开记录集,记录集被打开后,通过使用Movelast和MovePrevious方法,该记录集中的所有记录都被显示,直至记录集的开头。4、分页显示结果集 目前有很多方法能实现将数据库的查询结果分页显示,但主要有以下两种:(1)将数据库中所有符合查询条件的记录一次性读入记录集并存放在内存中,然后利用Recordset对象的一些页属性实现分页控制,编程较为简单。(2)根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。区别:区别:前者是一次性将所有记录都读入内存,然后再根据指示依次进行判断从而达到分页显示的效果

52、; 而后者是先根据指示做出判断,并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。RecordSet对象与分页相关的属性如下RecordCount属性属性:显示Recordset对象记录的总数。PageSize属性:属性:指定一页记录数,其缺省值为10。PageCount属性属性:通常配合PageSize属性一起用,它的大小由PageSize决定。指明当前RecordSet对象所包含的总的页数。为一长整型值若Recordset对象不支持该属性,则该属性返回-1,表明PageCount无法确定。 AbsolutePage属性属性:该属性可以设置当前记录的绝对页号,从而直接跳至

53、此页。如: 它将使记录指针指向第2页的第一个记录。也可用该属性取得当前记录所在的绝对页号,如:AbsolutePosition属性属性:表示当前记录相对于第一条记录的位置,即结果集中的第几条记录。要把一个记录集分成多个页,可以用PageSize属性指定一页中的记录个数。然后用AbsolutePage属性移动到一个特定的页。最后,用PageCount属性返回总页数。5、用数组处理记录集数据(不要求)、用数组处理记录集数据(不要求) 记录集的记录是可修改的,但有时希望保留记录集本身,修改操作在别处进行。ADO的Recordset对象有一个方法GetRows(),可以将一个记录集中的记录赋给一个数组

54、,使得修改可以在数组中进行。语法为: array=recordset.GetRows(Rows,Start,Fields)其中, Rows:可选参数,指出需要得到的记录数。Start:可选参数,GetRows操作将从这里开始取得记录。它可使用的常数值如下表:常数常数值说明adBookmarkCurrent0缺省值,从当前记录开始adBookmarkFirst1从首记录开始adBookmarkLast2从最后一条记录开始Fileds:可选参数,可以是一个字段名或字段的顺序位置。Array是二维数组,第一维说明字段,第二维说明记录号。例:将从表student中取出的记录放入一个数组中。 用数组处理

55、记录集数据% set cn=server.createobject(ADODB.connection) cn.open DSN=学生;UID=sa;PWD=sa set rs=cn.execute(select * from student)dim field(1)field(0)=学号field(1)=姓名 array=rs.GetRows(4,1,field) for i=0 to UBound(array,2) 指明记录数 for j=0 to UBound(array,1) 指明字段数 response.write( & array(j,i) next nextrs.close

56、cn.close%与数组相关的函数(第6章 ) 与数组相关的函数主要有两个:Ubound和Lbound函数。功能:Ubound函数返回数组在指定维数上数组下标的上界值,而Lbound函数则返回下界值。格式:Ubound(数组名,维数序号)或Lbound(数组名,维数序号)如:Dim sum(3,6) 则函数Ubound(sum,2)的值为6,Lbound(sum,2)的值为0。VBScript函数UBound()用来确定数组的维数。 Ubound函数返回数组在指定维数上数组下标的上界值。6、指定记录集的最大容量 Recordset对象的MaxRecords属性可以限制记录集的存放记录数,即限制

57、从一个数据库查询返回到一个记录集中的记录数目。 如要限制在站点上发布最近的n条信息,使记录集的MaxRecord属性值为n即可。 例:限制只在页面上显示前20条记录。 使用MaxRecords属性时,必须在打开记录集之前设置该必须在打开记录集之前设置该属性值属性值。记录集打开之后,该属性将成为只读属性。7、记录集记录的修改、记录集记录的修改向数据表添加记录添加记录,可以用SQL语句来实现。如: Insert into teacher(姓名,成绩) Values(“”,”)另外也可用SQL语句更新数据库表的记录更新数据库表的记录(update)。但由于SQL语句本身有长度限制,无法操作大容量的字

58、符串,如SQL Server的Text类型(可存储2GB数据) 而记录集的AddNew方法则不受此限制,因此,利用AddNew方法可实现大容量数据的输入,这是该方法的一大优势。(1)Addnew方法 格式为: AddNew Fields,Values Fields为一个字段名,Values为要添加的记录对应字段的值。若无此选项,则为添加一条空记录。如: rs.addnew 添加一条空记录 rs.addnew 学号, “09”添加学生记录 /动态游标,悲观锁定在上例中,rs.AddNew产生一条新的记录,在rs.Update被调用时数据将被新增至数据库中。注意:要想添加记录,必须使用非只读的锁定

59、方式。(2)Delete 方法 用该方法可删除当前记录。添加学生记录(3)update方法 如前面增加记录的例子: rs(电话号话)=43000 rs.update rs(“电话号话”)=“53001” rs.update 总之,不管是添加、删除、修改最后都要使用update. (4)UpdateBatch方法 UpdateBatch方法可将所有缓冲区内的数据分批更新至数据库。注意:只有以Keyset(关键集游标)或static(静态游标)方式打开的光标才能使用分批更新方式。如果要取消所有的缓冲区内的改变,可以调用CancleBatch方法。6. 4 使用Command对象Command对象负

60、责对数据库提出请求,也就是传递指定的SQL命令。1、建立Command对象Command对象可以利用已创建的Connection对象来创建,也可单独创建。(1)利用已创建的Connection对象建立Command对象 可以使用以下脚本创建Command对象: % set conn=server.creatobject(“adodb.connection”) conn.open “driver=sql server;Server=(local);UID=sa;PWD=sa;Database=学生” set cm=server.createobject(“ADODB.Command”) set cm.ActiveCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论