<p>本文简要比较了几种站点数据库访问方案,较为系统地介绍了利用ASP和ADO访问Web数据库的方法和技巧,并给出例子加以说明。</p><p>一、 站点数据库访问的几种方案</p><p>实现NT上Web数据库的访问的方案大致有以下三种:</p><p>1. 公共网关接口CGI</p><p>这是传统的方式,但CGI技术有很多缺点,如不易开发,更改成本高,功能有限,不易调试和检错,不具备事务处理的功能且很耗费服务器资源等。</p><p>2. Internet数据库连接器IDC</p><p>IDC是集成在Internet Server API(ISAPI)的应用。但是,由于IDC技术在同一时刻,只有一个实例在运行,要求能运行在安全的多进程中,多个请求同时到达,每一个函数在争用同一文件或同一数据块的内容时,必须多加小心,而涉及多进程的代码是很困难的。目前,ISAPI还不具备跨平台的功能,只限于NT平台。</p><p>3. 先进数据库连接器ADC(Advanced Database Connector)</p><p>ADC提供一个数据处理"Advanced Database Control"的ActiveX Control,以访问ODBC 的数据库。ADC与以上两种方案最大的不同点在于:ADC的数据查询操作是在用户端的浏览器上执行的。但ADC要将服务器端数据库中的可高达数千笔的记录先下载到用户端,所以只适合一些特别频繁的数据库查询操作。</p><p>ASP是以上问题的最终解决方案。</p><p>二、 ASP和ADO简介</p><p>ASP(Active Server Page,现行服务器页)是一个服务器端的脚本执行环境,用户可用它产生和执行动态的、交互的、高性能的Web服务器应用程序。当程序在服务器而不是在客户端执行时,Web服务器将完成产生浏览器的HTML页的所有工作。图1 ASP的工作模式</p><p>图1是ASP的工作模式。当浏览器向Web服务器提出文件(.asp)请求时,一个ASP脚本就开始执行,这时Web服务器调用ASP,把该文件全部读入并执行每一条命令,然后将结果以HTML的页面形式送回浏览器。</p><p>由于ASP在服务器上运行,所以ASP的源程序代码不会传到用户的浏览器,可保护源程序不会外漏。此外,ASP也是面向对象的,而且还可自己制作ActiveX服务器组件来扩充功能,可使用VB,Java,Visual C++,COBOL等程序语言来实现。</p><p>ASP提供六个内建对象。用户可直接调用:</p><p>1. Application对象:可以使用Application对象在给定的应用程序的所有用户之间共享信息。</p><p>2. ObjectContext对象:可以使用ObjectContext对象提交或放弃一项由MicrosoftTransaction Server(MTS)管理的事务,它由ASP 页包含的脚本初始化。ASP包含@TRANSACON指令时,该页会在事务中运行,直到事务成功或失败后才会终止。</p><p>3. Request对象:Request对象在HTTP请求期间,检索客户端浏览器传递给服务器的值。</p><p>4. Response对象:使用Response对象可以将输出发送到客户端。</p><p>5. Server对象:Server对象提供对服务器上的方法和属性的访问。</p><p>6. Session对象:可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。</p><p>ASP可以让开发者在VBScript或JavaScript中编写代码并允许把ActiveX控件直接集成到Web服务器内部。而ActiveX控件可用VB、VC等编写,使用户能自由选择最方便的方法来编写应用程序。由于ASP的ActiveX是在服务器端,客户端可使用任意的浏览器,非常灵活。</p><p>ADO (ActiveX Data Object,ActiveX数据对象)是一个ASP 内置的ActiveX服务器组件。ADO通过在WEB服务器上设定ODBC,可建立与多种数据库,如:SQL Server,Oracle,Informix,Access,VFP等的连接。可以把它与ASP结合起来,建立提供数据库信息的网页内容,在网页画面执行SQL命令,用户在浏览器页面中输入、更新和删除Web服务器信息,由服务器对WEB数据库进行相应的操作。</p><p>ADO可使用RecordSets对象,作为数据的主要接口。</p><p>ADO还可使用VBScript,JavaScript语言来控制数据库的访问,并生成查询结果的输出页面。</p><p>要执行ADO,服务器端须安装Windows NT Server和Internet Information Server(IIS),而客户端只要有IE或Netscape较新版本的浏览器即可。</p><p>三、 访问数据库</p><p>用ASP 和ADO访问数据库可按以下步骤进行:</p><p>1. 确定数据源</p><p>访问网上数据库,首先要设定数据源。在服务器上打开"我的电脑"中的"控制面板",双击"ODBC";在"系统DSN"下选"添加",选出预先设好的数据库种类、名称和位置。本文选择"SQL Server",数据源为"SIM_EC",数据库名称为"ECDB"。</p><p>2. ADO查询数据库的使用</p><p>ADO查询数据库的设计方法是先用"Server.CreateObject"取得对象"ADODB.Connection"的一个实例,并用"Open"打开待访问的数据库。</p><p>Set Conn=Server.CreateObject("ADODB.Connection")</p><p>Conn.Open "SIM_EC"</p><p>然后执行SQL命令,即可开始执行访问数据库的操作。</p><p>Set RS=Server.CreateObject("ADODB. RecordSet")</p><p>RS.Open SQL命令,Conn,1或</p><p>Set RS=Conn.Execute("SQL命令")</p><p>下一步就可对数据库进行查询操作,要用到RecordSet对象的如下命令:</p><p>RS.Fields.Count RecordSets的字段数</p><p>RS(i).Name 第i个字段名</p><p>RS(i) 第i个字段名的记录</p><p>RS("字段名") 指定字段的记录</p><p>RS.EOF 是否指向最后一个字段True or False</p><p>RS.MoveFirst 指向第一条记录</p><p>RS.MovePrev 指向前一条记录</p><p>RS.MoveNext 指向后一条记录</p><p>RS.MoveLast 指向最后一条记录</p><p>RS.GetRows 将查询结果存放在数组中,然后在从数组中读取</p><p>RS.Properties.Count 得到ADO的Connection或ResultSet的属性总数</p><p>RS.Properties(Item).Name 得到ADO的Connection或</p><p>ResultSet的属性名称</p><p>RS.Properties 得到ADO的Connection或ResultSet的属性值</p><p>3. 关闭数据库</p><p>使用如下命令:</p><p>RS.Close</p><p>Conn.Close</p><p>四、 数据库查询实例</p><p>本人曾参与某技术中心商品查询系统中Web功能模块的开发。系统要求当用户输入查询信息,如产地或产品类别后,系统能返回查询结果。我们以产品类别为例:catachoi.asp文件利用Form标签形成一个查询入口,当用户选择了某产品类别,并按下"Submit"按钮后,它将产品类别号以ProdName变量的形式送到p_result.asp中,p_result.asp根据ProdName的值,使用SQL语句在服务器端完成数据库表文件的查询,最后将查询结果送回浏览器端。</p><p>catachoi.asp</p><p><HTML></p><p><HEAD></p><p><TITLE>ActiveX Data Object (ADO)</TITLE></p><p></HEAD></p><p><BODY BGCOLOR=#BC8F8F></p><p><FORM NAME="FrmCata" METHOD="post" ACTION="p_result.asp"></p><p><p>请输入产品类别:<INPUT TYPE="text" NAME="ProName"></p></p><p><br><INPUT TYPE="submit" VALUE="提 交" ></p><p>&nbsp;&nbsp; <INPUT TYPE="reset" VALUE="清 除"> </p></p><p></FORM></p><p></BODY></p><p></HTML></p><p>p_result.asp</p><p><HTML></p><p><HEAD></p><p><TITLE>ActiveX Data Object(ADO)</TITLE></p><p></HEAD></p><p><BODY BGCOLOR=#BC8F8F></p><p><%CATALOGUE=Request.Form("ProName")%></p><p><%</p><p>SQL="select * from ECDB where 产品类别=‘"&CATALOGUE&"'"</p><p>Set Conn=Server.CreateObject("ADODB. Connection")</p><p>Conn.Open "SIM_EC"</p><p>Set RS=Server.CreateObject("ADODB. Recordset")</p><p>Set RS=Conn.Execute(SQL)</p><p>%></p><p><% If RS.Eof Then</p><p>Response.Write "<p>对不起!没有产品类型为</p><p><FONT COLOR=red>‘"%></p><p><%=CATALOGUE%></p><p><%Response.Write "'</FONT>的记录</p><p></p></BODY></HTML>"%></p><p><%Else %></p><p><p>有关<FONT COLOR="ff0080"><%=CATALOGUE%></FONT>的信息如下:</p><p></p></p><p><TABLE BORDER="1"></p><p><TR></p><p><TD WIDTH="10%" ALIGN="center"> <STRONG>编号</STRONG></TD></p><p><TD WIDTH="20%" ALIGN="center"> <STRONG>厂名</STRONG></TD></p><p><TD WIDTH="20%" ALIGN="center"> <STRONG>厂址</STRONG></TD></p><p><TD WIDTH="10%" ALIGN="center"> <STRONG>电话</STRONG></TD></p><p><TD WIDTH="8%" ALIGN="center"> <STRONG>规格</STRONG></TD></p><p><TD WIDTH="12%" ALIGN="center"></p><p><STRONG>技术指标</STRONG></TD></p><p></TR></p><p><%do while not RS.Eof%></p><p><TR></p><p><TD WIDTH="10%" ALIGN="center"><%=RS("ID")%> </TD></p><p><TD WIDTH="20%" ALIGN="center"><%=RS("FAC_NAME")%> </TD></p><p><TD WIDTH="20%" ALIGN="center"><%=RS("FAC_ADD")%> </TD></p><p><TD WIDTH="10%" ALIGN="center"><%=RS("TEL")%> </TD></p><p><TD WIDTH="10%" ALIGN="center"><%=RS("STANDARD")%> </TD></p><p><TD WIDTH="10%" ALIGN="center"><%=RS("INDEX")%> </TD></p><p></TR></p><p><%</p><p>RS.MoveNext</p><p>Loop</p><p>RS.Close</p><p>Conn.Close</p><p>%></p><p></TABLE></p><p><% End If%></p><p><FORM METHOD="POST" ACTION="NewAckSimRfq.asp"></p><p><p><INPUT TYPE="submit" VALUE="进行询价" NAME="NewRfq"></p></p><p></FORM></p><p><a HREF="HOMEPAGE.htm"><INPUT TYPE="normal" VALUE="返 回"></a></p></p><p></BODY></p><p></HTML></p><p>以上的程序简化了很多,其目的在于让用户更清晰地理解利用ASP和ADO访问Web数据库的精髓。本人开发基于ASP的主页时,把微软的HTML 编辑器FrontPage 98与InterDev1.0相结合,利用FrontPage 98所见即所得的方便性编写主页丰富多彩的界面部分,用ASP的专业开发工具InterDev 1.0编写服务器端的脚本语句。这种组合可以快速开发Web数据库的应用。</p> |
|