热搜词
发表于 2008-2-18 10:45:57 | 显示全部楼层 |阅读模式
<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>&lt;HTML&gt;</p><p>&lt;HEAD&gt;</p><p>&lt;TITLE&gt;ActiveX Data Object (ADO)&lt;/TITLE&gt;</p><p>&lt;/HEAD&gt;</p><p>&lt;BODY BGCOLOR=#BC8F8F&gt;</p><p>&lt;FORM NAME="FrmCata" METHOD="post" ACTION="p_result.asp"&gt;</p><p>&lt;p&gt;请输入产品类别:&lt;INPUT TYPE="text" NAME="ProName"&gt;&lt;/p&gt;</p><p>&lt;br&gt;&lt;INPUT TYPE="submit" VALUE="提 交" &gt;</p><p>&amp;nbsp;&amp;nbsp; &lt;INPUT TYPE="reset" VALUE="清 除"&gt; &lt;/p&gt;</p><p>&lt;/FORM&gt;</p><p>&lt;/BODY&gt;</p><p>&lt;/HTML&gt;</p><p>p_result.asp</p><p>&lt;HTML&gt;</p><p>&lt;HEAD&gt;</p><p>&lt;TITLE&gt;ActiveX Data Object(ADO)&lt;/TITLE&gt;</p><p>&lt;/HEAD&gt;</p><p>&lt;BODY BGCOLOR=#BC8F8F&gt;</p><p>&lt;%CATALOGUE=Request.Form("ProName")%&gt;</p><p>&lt;%</p><p>SQL="select * from ECDB where 产品类别=‘"&amp;CATALOGUE&amp;"&#39;"</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>%&gt;</p><p>&lt;% If RS.Eof Then</p><p>Response.Write "&lt;p&gt;对不起!没有产品类型为</p><p>&lt;FONT COLOR=red&gt;‘"%&gt;</p><p>&lt;%=CATALOGUE%&gt;</p><p>&lt;%Response.Write "&#39;&lt;/FONT&gt;的记录</p><p>&lt;/p&gt;&lt;/BODY&gt;&lt;/HTML&gt;"%&gt;</p><p>&lt;%Else %&gt;</p><p>&lt;p&gt;有关&lt;FONT COLOR="ff0080"&gt;&lt;%=CATALOGUE%&gt;&lt;/FONT&gt;的信息如下:</p><p>&lt;/p&gt;</p><p>&lt;TABLE BORDER="1"&gt;</p><p>&lt;TR&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt; &lt;STRONG&gt;编号&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;TD WIDTH="20%" ALIGN="center"&gt; &lt;STRONG&gt;厂名&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;TD WIDTH="20%" ALIGN="center"&gt; &lt;STRONG&gt;厂址&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt; &lt;STRONG&gt;电话&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;TD WIDTH="8%" ALIGN="center"&gt; &lt;STRONG&gt;规格&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;TD WIDTH="12%" ALIGN="center"&gt;</p><p>&lt;STRONG&gt;技术指标&lt;/STRONG&gt;&lt;/TD&gt;</p><p>&lt;/TR&gt;</p><p>&lt;%do while not RS.Eof%&gt;</p><p>&lt;TR&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt;&lt;%=RS("ID")%&gt; &lt;/TD&gt;</p><p>&lt;TD WIDTH="20%" ALIGN="center"&gt;&lt;%=RS("FAC_NAME")%&gt; &lt;/TD&gt;</p><p>&lt;TD WIDTH="20%" ALIGN="center"&gt;&lt;%=RS("FAC_ADD")%&gt; &lt;/TD&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt;&lt;%=RS("TEL")%&gt; &lt;/TD&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt;&lt;%=RS("STANDARD")%&gt; &lt;/TD&gt;</p><p>&lt;TD WIDTH="10%" ALIGN="center"&gt;&lt;%=RS("INDEX")%&gt; &lt;/TD&gt;</p><p>&lt;/TR&gt;</p><p>&lt;%</p><p>RS.MoveNext</p><p>Loop</p><p>RS.Close</p><p>Conn.Close</p><p>%&gt;</p><p>&lt;/TABLE&gt;</p><p>&lt;% End If%&gt;</p><p>&lt;FORM METHOD="POST" ACTION="NewAckSimRfq.asp"&gt;</p><p>&lt;p&gt;&lt;INPUT TYPE="submit" VALUE="进行询价" NAME="NewRfq"&gt;&lt;/p&gt;</p><p>&lt;/FORM&gt;</p><p>&lt;a HREF="HOMEPAGE.htm"&gt;&lt;INPUT TYPE="normal" VALUE="返 回"&gt;&lt;/a&gt;&lt;/p&gt;</p><p>&lt;/BODY&gt;</p><p>&lt;/HTML&gt;</p><p>以上的程序简化了很多,其目的在于让用户更清晰地理解利用ASP和ADO访问Web数据库的精髓。本人开发基于ASP的主页时,把微软的HTML 编辑器FrontPage 98与InterDev1.0相结合,利用FrontPage 98所见即所得的方便性编写主页丰富多彩的界面部分,用ASP的专业开发工具InterDev 1.0编写服务器端的脚本语句。这种组合可以快速开发Web数据库的应用。</p>
全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2025-2-12 09:48 , Processed in 0.174536 second(s), 22 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2025 Discuz! Team