答案:随着Internet/Intranet技术的飞速发展,Web成了新的商家必争之地,各家厂商都希通过Internet/Intranet技术与最终用户建立直接的联系,比如在Web 上向用户推销产品、方便用户在网上查询自己喜欢的商品并提供网上订购服务等。于是基于Web方式的数据库技术应运而生。但是在传统的HTML页面中,访问数据库一般是通过公用网关接口(CGI)来实现,这种方式不仅开发困难,而且在出现大量并发请求时会显著地降低服务器的运行效率,而采用ASP(Active Server Pages)技术实现数据库访问就能较好地解决这个问题。
微软的ASP技术是一种运行于服务器端的脚本编写模型,它使开发者可以使用几乎所有的脚本语言(VBScript、Jscript或Perl等)编写脚本,这些脚本可以执行应用程序逻辑,并能够调用ActiveX组件执行特殊任务,如数据库查询、文件输入输出等。它将IDC的简单性和ISAPI的灵活性综合在一起。自从Microsoft IIS 3.0(Internet Information Server 3.0)出现以来,微软提出并一直致力于发展ASP技术。至今,ASP技术得到了进一步的发展,在IIS 4.0中提供了ASP 脚本调试工具、事务处理、新的ActiveX组件、RDS等新特性。
在ASP脚本中可以通过三种方式访问数据库:传统的IDC(Internet Database Connector)方式,ADO(ActiveX Data Objects)方式以及RDS (Remote Data Service)方式。从概念上来讲,这三种访问方式对数据库的访 问是由Internet Information Server来完成的。 Web浏览器用HTTP协议向Internet信息服务器(IIS)递交请求。Internet信息服务器执行访问数据库的操作,并以一个HTML格式的文档作为回答。
一.Internet数据库接口(IDC)
IDC是一个传统的数据库查询工具,用来定义和执行数据库查询的SQL命令,并向浏览器返回一个指定数据格式的页面。使用IDC访问数据库最大的特点是简单,几乎不需要编程就能实现对数据库的访问。
IDC使用两种文件来控制如何访问数据库以及如何创建返回的Web页面。这些文件分别是IDC (.idc)文件和HTML扩展(.htx)文件。
.idc文件必须包括ODBC数据源(Datasource)、HTML扩展文件的文件名(Template)以及要执行的SQL语句(SQLStatement)。此外还有许多可选字
段,可以根据需要选用。
.htx文件是带有用<%%>或<!--%%-->括起来的附加标记的 HTML 文档,IDC
用这些标记将动态数据添加到文档中。在.htx文件中有六个关键字
(begindetail、enddetail、if、else、endif和"%z")用来控制数据库中的数据怎样和.htx文件中HTML格式进行合并。数据库列名说明HTML文档中什么数据被返回。
下面是IDC应用的简单示例,这个例子是一个虚拟水果店的库存量查询。
.idc文件: Datasource: Kucun
<!-- 指定预先建立的数据源Kucun -->
Template: IDCReslt.htx
<!-- 相应的.htx文件的文件名和路径 -->
SQLStatement: SELECT * FROM 库存表
<!-- 要执行的SQL查询命令 -->
.htx文件:<HTML><HEAD><TITLE>水果店库存量查询结果</TITLE></HEAD>
<BODY>
<TABLE BORDER=1><CAPTION>水果店库存量查询结果</CAPTION>
<%begindetail%>
<%if CurrentRecord EQ 0 %>
<!-- CurrentRecord表示当前返回的记录-->
<TR><TD>序号</TD><TD>商品名称</TD><TD>库存量</TD><TD>进价
</TD><TD>单位</TD><TD>进货日期</TD></TR>
<%endif%>
<!-- 输出查询返回的列-->
<TR><TD><%ID%></TD><TD><%商品名称%></TD><TD><%库存量
%></TD><TD><%进价%></TD><TD><%单位%></TD><TD><%进货日期%></TD></TR>
<%enddetail%>
</TABLE></BODY></HTML>
注意:<%begindetail%>和<%enddetail%>之间的部分划定了界线,决定数据库中的哪些行将作为返回数据并显示在文档中。查询返回的列被<%%>包围,就象例子中的<%商品名称%> 和<%库存量%>等。
要执行IDC查询,通常的做法是在HTML文件中嵌入一个.idc文件的连接。例
如,下面的HTML语句向Web服务器发出了请求,要求执行idctest.idc文件。
<A HREF=>
二.ActiveX数据对象(ADO)
与IDC不同,用ADO访问数据库更类似于编写数据库应用程序,ADO把绝大部分的数据库操作封装在七个对象中,在ASP页面中编程调用这些对象执行相应的数据库操作。ADO是ASP技术的核心之一,它集中体现了ASP技术丰富而灵活的数据库访问功能。ADO建立了基于Web方式访问数据库的脚本编写模型,它不仅支持任何大型数据库的核心功能,而且支持许多数据库所专有的特性。ADO使用本机数据源,通过ODBC访问数据库。这些数据库可以是关系型数据库、文本型数据库、层次型数据库或者任何支持ODBC的数据库。ADO的主要优点是易用、高速、占用内存和磁盘空间少,所以非常适合于作为服务器端的数据库访问技术。相对于访问数据库的 CGI程序而言,它是多线程的,在出现大量并发请求时,也同样可以保持服务器的运行效率,并且通过连接池(Connection Pool)技术以及对数据库连接资源的完全控制,提供与远程数据库的高效连接与访问,同时它还支持事务处理
(Transaction),以开发高效率、高可靠性的数据库应用程序。
正是因为使用ADO需要编写脚本程序,所以ADO能够实现更复杂、更灵活的数据库访问逻辑。目前,ADO包括Command、Connection、Recordset等七个对象和一个动态的Properties集合,绝大部分的数据库访问任务都可以通过它们的组合来完成。
一般使用ADO访问数据库的ASP脚本程序应该使用Connection对象建立并管理与远程数据库的连接;使用Command对象提供灵活的查询;而使用Recordset对象访问数据库查询所返回的结果。这三者是ADO中最基本也最核心的对象。下面的例子解释了如何使用这三个对象访问数据库。
<% Dim strDSN, strSQL
'定义用到的变量
Dim cn, rs, cm , ObjName, ObjKucun, ObjPrice, ObjUnit, ObjDate
strDSN = "FILEDSN=Kucun.dsn"
'建立DSN字符串
Set cn = Server.CreateObject("ADODB.Connection")
'创建Connection对象的一个实例
cn.Open strDSN
'与strDSN指定的数据源建立连接
Set cm= Server.CreateObject("ADODB.Command")
'创建Command对象的一个实例
Set cm.ActiveConnection = cn
'指定cm使用cn所建立的数据库连接
cm.CommandText = "INSERT INTO 库存表(商品名称,库存量,进价,单位,进
货日期) VALUES (?,?,?,?,?)"
'预定义带参数的SQL查询命令
cm.Prepared = True
'通知数据源预处理该查询命令
cm.Parameters.Append cm.CreateParameter("商品名称",200, ,255 )
'定义查询参数
cm.Parameters.Append cm.CreateParameter("库存量",200, ,255 )
cm.Parameters.Append cm.CreateParameter("进价",200, ,255 )
cm.Parameters.Append cm.CreateParameter("单位",200, ,255 )
cm.Parameters.Append cm.CreateParameter("进货日期",200, ,255 )
cm("商品名称") = "葡萄"
'给参数赋值
cm("库存量") = 400
cm("进价") = 0.8
cm("单位") = "斤"
cm("进货日期") = #95-6-12#
cm.Execute
'按照给定的参数值执行预定义的SQL查询命令
cm("商品名称") = "柿子"
cm("库存量") = 300
cm("进价") = 0.4
cm("单位") = "斤"
cm("进货日期") = #95-6-11#
cm.Execute
Set rs= Server.CreateObject("ADODB.Recordset")
'创建Recordset对象的一个实例
strSQL = "SELECT * FROM 库存表"
'建立查询命令字符串
rs.Open strSQL, cn
'使用cn的数据库连接执行strSQL定义的查询命令
Set objName = rs("商品名称")
'将返回的列保存在变量中
Set objKucun = rs("库存量")
Set objPrice = rs("进价")
Set objUnit = rs("单位")
Set objDate = rs("进货日期") %>
<CENTER>
'使用循环语句将查询结果以表格形式输出
<TABLE BORDER=1><CAPTION>水果店库存量查询结果</CAPTION>
<% Do Until rs.EOF %>
<TR><TD><% Response.write ObjName %></TD><TD><% Response.write
ObjKucun %></TD><TD><% Response.write ObjPrice %&g
上一个:在ASP中用集合成批操作数据库
下一个:功能强大的内置组件