数据库的问题`~

利用ASP和VBScript技术开发Web数据库查询系统- -

一、ASP的工作机制

(1)可以完全同HTML集成。

(2)易于创建,不需要手动编译和连接。

(3)面向对象和易于用ActiveX组件扩展。

(4) 对客户端没有特别的要求,只要有一个浏览器就行。

(5)安全性和保密性较好

二、定位常用的几种开发基于ASP模型的Web数据库应用程序的方法

ASP应用程序是包含了ASP网页的Web应用程序。由于ASP模型具有很多的优点,基于ASP架构的数据库应用程序也是一种功能强大的Web数据库解决方案。

常用的开发ASP应用程序的方法有以下几种:利用Visual InterDev集成环境开发ASP应用程序;利用VB6开发ASP的IIS应用程序;借助FrontPage98开发界面,直接编辑ASP文本文件等三种方法。

对于一般的开发人员,微软的VISUAL INTERDEV以其强大的功能和优秀的集成编辑环境成为开发ASP应用程序的首选工具。

三、设计一个具体的Web数据库查询系统

一个基本的Web数据库查询系统可以是如下结构的:

在Web数据库查询中,后台数据库的连接是至关重要的。ASP对数据库的访问主要是通过内置对象ADO(Active Data Object)来实现的。ADO是Microsoft针对网络数据库应用和Visual系列开发工具所开发的数据对象,在微软的系列产品中得到了很好的支持。在ASP中它可以被认为是一种数据库服务组件。与很多程序员熟悉的RDO、DAO不同,ADO是在OLE DB规范下开发的,它具有面向对象的特性.操作方法和DAO类似。

通过ADO访问Web数据库已经成为开发Web数据库查询系统的一般模式。在Web上访问数据库一般可分为以下步骤:

(1) 创建数据库源名。数据库源名,即Data Source Name是连接ODBC和数据库的桥梁,ODBC通过DSN来找到要访问的数据库。在Windows的控制面板中提供了一个名为“32位ODBC”的工具对其进行管理。在单机环境中开发Web应用时,这种通过首先创建数据库源的方法来访问数据库具有较好的可调试性,否则必须连接到一个Web上的服务器来寻找一个可供访问的数据库源。

(2) 创建数据库连接。在ASP中要访问数据,必须还要创建与数据库的连接。

具体语法如下: Set Conn1=Server.CreateObject(“ADODB.Connection”),这样就创建了链接对象Conn1。具体编程中,Conn1是直接访问数据库的一个很关键的对象名。创建数据库连接后,就要打开这个连接以供访问。

具体语法如下:Conn1.Open “DSN1”,“username”,“password” 。最后两个参数是可选参数。

(3) 创建数据对象。RecordSet是ADO中保存数据库命令结果集的对象。通过它可以直接访问数据库中的每个记录和各个字段的属性。具体语法如下:

Set RecordSet=Conn1.Execute(sqlStr) 这条语句创建并打开了一个Recordset对象,sqlStr是一条SQL的查询语句,执行这条SQL语句后返回具体的查询结果给Recordset对象。

(4) 操作数据库。 Execute方法的参数是一个标准的SQL语句串,可以用它来实现数据插入、修改、删除等操作。

(5) 关闭数据对象和链接。打开了一个ADO对象后,必须在使用完后关闭它。以释放在服务器上的资源。

在开发Web数据库应用程序时,由于ASP模型主要是基于服务器端的,只有当用户单击了一个ASP调用(如〈form method="POST" action="complex_result.asp"〉)的超链接或表单的提交按钮后才能工作,无法对客户的输入作出实时响应。如一个检查各字段是否为空的操作,就必须数据传送到服务器端后,才能作出判断。表现在具体编程中,就是判断的代码必须放在下一个页面中。由于VBScript是基于客户端的脚本语言,所以这种检查可以通过在ASP中内嵌VBScript脚本来完成。实际上,一个成功的ASP应用程序经常是ASP模型与VBScript或JavaScript脚本紧密结合的产物。

与一般源代码编写不同的是,ASP应用程序的重点不在一般HTML代码的编写上,IIS只对〈%〉标志对内的代码进行解释和运行。〈%〉标志对内的代码具有相对完整性,可以认为它与一般HTML语言是完全互不影响的。

ASP应用程序的实际实现过程中,界面设计和代码的编写实现一种紧密结合能极大地提高效率。尤其在FrontPage98中,良好的界面设计可以极大地优化程序的结构,也具有较好的可读性。

四、实现技巧及具体实例

以下就笔者的一点经验谈谈在编制ASP应用程序中的一些技巧。

(1)Response对象中的Write方法在直接输出一个由变量表达的字符串时具有重要的作用。甚至它可以作为一种ASP向客户端返回HTML页面的一种主要方式。这也是VB6中创建动态HTML的一种重要方法。

可以参考以下代码:

〈% if rs.fields("有无幻灯").value=true then

response.write "〈td width='13%'〉〈p align='center'〉有〈/td〉"

else

response.write "〈td width='13%'〉〈p align='center'〉无〈/td〉"

end if%〉

(2)对同一表单内的元素可以用Request.Form( parameter)方法获得当前表单内的元素的值,这在实际编程中具有极大的便利。甚至在两个相邻的页面间也能顺利传值。

(3)ASP应用程序中如何解决页面间的传值一直是个关键的问题。一般可以有以下六种方法:

A. 利用Application对象在应用程序的所有用户中***享信息,它可以在服务器运行期间持久地保存数据。

B. 可以用Session对象中的对象为应用程序的单个用户持久保存数据。但保存时间受到Session对象的另一个属性Timeout控制。

C. 相邻页面之间同一表单内的元素可以使用Request.form(parameter)的方法来实现传值。

D. 在ASP应用程序目录中的Global.asa文件中定义一些全局变量及过程。在Global.asa文件中创建的全局变量和过程在整个Web应用程序中都是可见的。

E. 对于在多个页面之间的传值,最适合的方法是利用Request.querystring属性。即在表单的Action或页面元素的超链接中,可以添加关于Request.querystring的引用。具体如下:

〈form method="POST" action="complex_query.asp"?query1=rs.fields(0).value〉

则在complex_query.asp中,可以通过Request.querystring(“query1”)来取得query1的值,并可以采用同样的方法把这个值再传送下去。

F. 还可以利用HTML中隐含域的特性传递。

以下是一段关于Web数据库查询的程序实例。

下面一段程序实现复合查询条件的生成,ASP文件名为Complex_query.asp。

〈html〉

〈%@ Language="VBScript"%〉

〈head〉

〈meta plex_result.asp"〉

〈p〉〈font color="#000000" face="宋体"〉教师为〈big〉:〈/big〉〈/font〉〈select SIZE="1"

NAME="list1"〉

〈option〉无〈/option〉

〈%

rs1.movefirst

do while not rs1.eof%〉 〈option value="〈%=rs1.fields(0).value%〉"〉 〈%=rs1.fields(0).value%〉 〈/option〉

〈%rs1.movenext

loop

rs1.close

conn1.close%〉 〈/select〉 〈%

set conn2=server.createobject("adodb.connection")

conn2.open "kc_mdb","",""

set rs2=conn2.execute("select * from classroom")%〉〈select name="operator1" size="1"〉

〈option selected value="or"〉or〈/option〉

〈option value="and"〉and〈/option〉

〈/select〉〈font face="宋体"〉 教室为:〈/font〉〈select SIZE="1" NAME="list2"〉

〈option〉无〈/option〉

〈%rs2.movefirst

do while not rs2.eof%〉 〈option value="〈%=rs2.fields(0).value%〉"〉 〈%=rs2.fields(0).value%〉 〈/option〉

〈%rs2.movenext

loop

rs2.close

conn2.close%〉〈%

set conn3=server.createobject("adodb.connection")

conn3.open "kc_mdb","",""

set rs3=conn3.execute("select * from course")%〉 〈/select〉 〈select name="operator2" size="1"〉

〈option selected value="or"〉or〈/option〉

〈option value="and"〉and〈/option〉

〈/select〉 〈font face="宋体"〉课程为:〈/font〉〈select SIZE="1" NAME="list3"〉

〈option〉无〈/option〉

〈%rs3.movefirst

do while not rs3.eof%〉 〈option value="〈%=rs3.fields(0).value%〉"〉 〈%=rs3.fields(0).value%〉 〈/option〉

〈%rs3.movenext

loop

rs3.close

conn3.close%〉〈%

set conn4=server.createobject("adodb.connection")

conn4.open "kc_mdb","",""

set rs4=conn4.execute("select * from kb")%〉 〈/select〉〈/p〉

〈p〉〈select name="operator3" size="1"〉

〈option selected value="or"〉or〈/option〉

〈option value="and"〉and〈/option〉

〈/select〉日期为:〈input type="text" name="T1" size="10"〉 〈select name="operator4"

size="1"〉

〈option selected value="or"〉or〈/option〉

〈option value="and"〉and〈/option〉

〈/select〉周次为:〈input type="text" name="T2" size="10"〉 〈select name="operator5"

size="1"〉

〈option selected value="or"〉or〈/option〉

〈option value="and"〉and〈/option〉

〈/select〉节次为:〈input type="text" name="T3" size="10"〉〈/p〉

〈p〉〈input TYPE="submit" VALUE="开始查询" NAME="B1"〉〈/p〉

〈/form〉

〈/body〉

〈/html〉

下面一段程序按查询条件返回查询结果。

〈html〉

〈%@ Language="VBScript"%〉

〈head〉

〈meta Explorer 无法调试包含ASP主页的Web应用程序。因此必须安装Microsoft Personal Web Server。以Win98为例,单碟的中文Win98安装盘在Win98\add-ons\pws子目录下已带了Microsoft Personal Web Server的安装程序,这是单机版的个人Web管理器。安装个人Web管理器后,在屏幕右下角的系统托盘(Systray)中可以看见一个Personal Web Server的小图标,双击此图标,呼出个人Web管理器的主界面。在个人Web管理器上的“高级”窗口中,把“高级选项”的虚拟目录定在正在开发的ASP应用程序的目录上。把“默认文档”指定为你想调试的ASP主页。这时,切换至个人Web管理器上的“主屏”窗口中,点击“发布”框中的“你的主页在:”后的“http://----”, 个人Web管理器会打开一个新的IE窗口来显示指定的ASP页面。