您的位置:寻梦网首页编程乐园ASP编程>利用ASP和ADO访问Web数据库
利用ASP和ADO访问Web数据库
作者:中国人民大学经济科学实验室(100872) 丁浩

本文简要比较了几种站点数据库访问方案,较为系统地介绍了利用ASP和ADO访问Web数据库的方法和技巧,并给出例子加以说明。

一、 站点数据库访问的几种方案

实现NT上Web数据库的访问的方案大致有以下三种:

1. 公共网关接口CGI

这是传统的方式,但CGI技术有很多缺点,如不易开发,更改成本高,功能有限,不易调试和检错,不具备事务处理的功能且很耗费服务器资源等。

2. Internet数据库连接器IDC

IDC是集成在Internet Server API(ISAPI)的应用。但是,由于IDC技术在同一时刻,只有一个实例在运行,要求能运行在安全的多进程中,多个请求同时到达,每一个函数在争用同一文件或同一数据块的内容时,必须多加小心,而涉及多进程的代码是很困难的。目前,ISAPI还不具备跨平台的功能,只限于NT平台。

3. 先进数据库连接器ADC(Advanced Database Connector)

ADC提供一个数据处理"Advanced Database Control"的ActiveX Control,以访问ODBC 的数据库。ADC与以上两种方案最大的不同点在于:ADC的数据查询操作是在用户端的浏览器上执行的。但ADC要将服务器端数据库中的可高达数千笔的记录先下载到用户端,所以只适合一些特别频繁的数据库查询操作。

ASP是以上问题的最终解决方案。

二、 ASP和ADO简介

ASP(Active Server Page,现行服务器页)是一个服务器端的脚本执行环境,用户可用它产生和执行动态的、交互的、高性能的Web服务器应用程序。当程序在服务器而不是在客户端执行时,Web服务器将完成产生浏览器的HTML页的所有工作。图1 ASP的工作模式

图1是ASP的工作模式。当浏览器向Web服务器提出文件(.asp)请求时,一个ASP脚本就开始执行,这时Web服务器调用ASP,把该文件全部读入并执行每一条命令,然后将结果以HTML的页面形式送回浏览器。

由于ASP在服务器上运行,所以ASP的源程序代码不会传到用户的浏览器,可保护源程序不会外漏。此外,ASP也是面向对象的,而且还可自己制作ActiveX服务器组件来扩充功能,可使用VB,Java,Visual C++,COBOL等程序语言来实现。

ASP提供六个内建对象。用户可直接调用:

1. Application对象:可以使用Application对象在给定的应用程序的所有用户之间共享信息。

2. ObjectContext对象:可以使用ObjectContext对象提交或放弃一项由MicrosoftTransaction Server(MTS)管理的事务,它由ASP 页包含的脚本初始化。ASP包含@TRANSACON指令时,该页会在事务中运行,直到事务成功或失败后才会终止。

3. Request对象:Request对象在HTTP请求期间,检索客户端浏览器传递给服务器的值。

4. Response对象:使用Response对象可以将输出发送到客户端。

5. Server对象:Server对象提供对服务器上的方法和属性的访问。

6. Session对象:可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

ASP可以让开发者在VBScript或JavaScript中编写代码并允许把ActiveX控件直接集成到Web服务器内部。而ActiveX控件可用VB、VC等编写,使用户能自由选择最方便的方法来编写应用程序。由于ASP的ActiveX是在服务器端,客户端可使用任意的浏览器,非常灵活。

ADO (ActiveX Data Object,ActiveX数据对象)是一个ASP 内置的ActiveX服务器组件。ADO通过在WEB服务器上设定ODBC,可建立与多种数据库,如:SQL Server,Oracle,Informix,Access,VFP等的连接。可以把它与ASP结合起来,建立提供数据库信息的网页内容,在网页画面执行SQL命令,用户在浏览器页面中输入、更新和删除Web服务器信息,由服务器对WEB数据库进行相应的操作。

ADO可使用RecordSets对象,作为数据的主要接口。

ADO还可使用VBScript,JavaScript语言来控制数据库的访问,并生成查询结果的输出页面。

要执行ADO,服务器端须安装Windows NT Server和Internet Information Server(IIS),而客户端只要有IE或Netscape较新版本的浏览器即可。

三、 访问数据库

用ASP 和ADO访问数据库可按以下步骤进行:

1. 确定数据源

访问网上数据库,首先要设定数据源。在服务器上打开"我的电脑"中的"控制面板",双击"ODBC";在"系统DSN"下选"添加",选出预先设好的数据库种类、名称和位置。本文选择"SQL Server",数据源为"SIM_EC",数据库名称为"ECDB"。

2. ADO查询数据库的使用

ADO查询数据库的设计方法是先用"Server.CreateObject"取得对象"ADODB.Connection"的一个实例,并用"Open"打开待访问的数据库。

Set Conn=Server.CreateObject("ADODB.Connection")

Conn.Open "SIM_EC"

然后执行SQL命令,即可开始执行访问数据库的操作。

Set RS=Server.CreateObject("ADODB. RecordSet")

RS.Open SQL命令,Conn,1或

Set RS=Conn.Execute("SQL命令")

下一步就可对数据库进行查询操作,要用到RecordSet对象的如下命令:

RS.Fields.Count RecordSets的字段数

RS(i).Name 第i个字段名

RS(i) 第i个字段名的记录

RS("字段名") 指定字段的记录

RS.EOF 是否指向最后一个字段True or False

RS.MoveFirst 指向第一条记录

RS.MovePrev 指向前一条记录

RS.MoveNext 指向后一条记录

RS.MoveLast 指向最后一条记录

RS.GetRows 将查询结果存放在数组中,然后在从数组中读取

RS.Properties.Count 得到ADO的Connection或ResultSet的属性总数

RS.Properties(Item).Name 得到ADO的Connection或

ResultSet的属性名称

RS.Properties 得到ADO的Connection或ResultSet的属性值

3. 关闭数据库

使用如下命令:

RS.Close

Conn.Close

四、 数据库查询实例

本人曾参与某技术中心商品查询系统中Web功能模块的开发。系统要求当用户输入查询信息,如产地或产品类别后,系统能返回查询结果。我们以产品类别为例:catachoi.asp文件利用Form标签形成一个查询入口,当用户选择了某产品类别,并按下"Submit"按钮后,它将产品类别号以ProdName变量的形式送到p_result.asp中,p_result.asp根据ProdName的值,使用SQL语句在服务器端完成数据库表文件的查询,最后将查询结果送回浏览器端。

catachoi.asp

<HTML>

<HEAD>

<TITLE>ActiveX Data Object (ADO)</TITLE>

</HEAD>

<BODY BGCOLOR=#BC8F8F>

<FORM NAME="FrmCata" METHOD="post" ACTION="p_result.asp">

<p>请输入产品类别:<INPUT TYPE="text" NAME="ProName"></p>

<br><INPUT TYPE="submit" VALUE="提 交" >

&nbsp;&nbsp; <INPUT TYPE="reset" VALUE="清 除"> </p>

</FORM>

</BODY>

</HTML>

p_result.asp

<HTML>

<HEAD>

<TITLE>ActiveX Data Object(ADO)</TITLE>

</HEAD>

<BODY BGCOLOR=#BC8F8F>

<%CATALOGUE=Request.Form("ProName")%>

<%

SQL="select * from ECDB where 产品类别=‘"&CATALOGUE&"'"

Set Conn=Server.CreateObject("ADODB. Connection")

Conn.Open "SIM_EC"

Set RS=Server.CreateObject("ADODB. Recordset")

Set RS=Conn.Execute(SQL)

%>

<% If RS.Eof Then

Response.Write "<p>对不起!没有产品类型为

<FONT COLOR=red>‘"%>

<%=CATALOGUE%>

<%Response.Write "'</FONT>的记录

</p></BODY></HTML>"%>

<%Else %>

<p>有关<FONT COLOR="ff0080"><%=CATALOGUE%></FONT>的信息如下:

</p>

<TABLE BORDER="1">

<TR>

<TD WIDTH="10%" ALIGN="center"> <STRONG>编号</STRONG></TD>

<TD WIDTH="20%" ALIGN="center"> <STRONG>厂名</STRONG></TD>

<TD WIDTH="20%" ALIGN="center"> <STRONG>厂址</STRONG></TD>

<TD WIDTH="10%" ALIGN="center"> <STRONG>电话</STRONG></TD>

<TD WIDTH="8%" ALIGN="center"> <STRONG>规格</STRONG></TD>

<TD WIDTH="12%" ALIGN="center">

<STRONG>技术指标</STRONG></TD>

</TR>

<%do while not RS.Eof%>

<TR>

<TD WIDTH="10%" ALIGN="center"><%=RS("ID")%> </TD>

<TD WIDTH="20%" ALIGN="center"><%=RS("FAC_NAME")%> </TD>

<TD WIDTH="20%" ALIGN="center"><%=RS("FAC_ADD")%> </TD>

<TD WIDTH="10%" ALIGN="center"><%=RS("TEL")%> </TD>

<TD WIDTH="10%" ALIGN="center"><%=RS("STANDARD")%> </TD>

<TD WIDTH="10%" ALIGN="center"><%=RS("INDEX")%> </TD>

</TR>

<%

RS.MoveNext

Loop

RS.Close

Conn.Close

%>

</TABLE>

<% End If%>

<FORM METHOD="POST" ACTION="NewAckSimRfq.asp">

<p><INPUT TYPE="submit" VALUE="进行询价" NAME="NewRfq"></p>

</FORM>

<a HREF="HOMEPAGE.htm"><INPUT TYPE="normal" VALUE="返 回"></a></p>

</BODY>

</HTML>

以上的程序简化了很多,其目的在于让用户更清晰地理解利用ASP和ADO访问Web数据库的精髓。本人开发基于ASP的主页时,把微软的HTML 编辑器FrontPage 98与InterDev1.0相结合,利用FrontPage 98所见即所得的方便性编写主页丰富多彩的界面部分,用ASP的专业开发工具InterDev 1.0编写服务器端的脚本语句。这种组合可以快速开发Web数据库的应用。