你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
使用ASP技术和SQL语句实现数据库的操作
 

随着企业级Intranet 的广泛开发使用,在网页上访问数据库的需求越来越大。但在原始的设计方法下,为了访问数据库数据,人们使用表单和HTML语言所实现的静态网页,缺乏交互性,数据不能根据录入、修改、删除情况随时更新。为了维护更新网页内容,必须不断地重复修改HTML文档,工作量非常繁重。这就提出了如何实现数据库的动态访问的问题。

    现今常用的实现动态网页的方法有CGIISAPINSAPI)、PHP或直接利用脚本语言等。但这些技术都不适合于快速应用开发和技术普及。如CGI,编程实现过于复杂,而且采用页面对应进程的形式,会大量耗量系统资源。而ISAPINSAPI技术虽然采用DLL取代线程,提高了系统性能,但需要考虑进程同步且开发复杂,不易掌握。另外采用客户端脚本语言虽也可实现简单的动态交互式页面,但功能有限,并且不同的浏览器对脚本语言的支持不同。因此,在针对企业级Intranet 网站的开发中,需要寻找一种开发相对简单、性能相对较高的技术。微软公司推出的ASP就是针对Web的应用程序开发技术,只需编写几行脚本语句,就可以产生并执行动态、交互式的站点服务器应用程序。

    本文根据ASP,结合结构化查询语言SQL,实现了Web环境下对数据库的动态操作。主要包括数据记录的查询、修改、插入和删除等,并提供较为详细的源程序,只需稍作修改,即可应用到自己的网页中去。

一、SQL的简单介绍

SQL语言是目前关系数据库管理系统的一种通用的结构查询语言,众多的数据库管理系统,如ORACLE Sybase Informix都支持SQL语言,甚至微软也推出了自己的SQL。在进行网络应用程序开发中,我们知道,都要大量使用SQL语句来进行各种数据库的处理。现在ISO已为SQL语言制订出了国际标准。 但需要注意的是,不同的DBMS中的SQL语句语法有可能有细小区别,在开发中应尽可能使用标准格式。

SQL的广泛使用正说明了它的优秀。它是一种非过程化的语言,允许用户在高层的数据结构上工作,即可操作记录集。所有的SQL语句接受集合作为输入,返回集合作为输出。SQL不要求用户指定对数据的存放方法,使用户更易集中精力于要得到的结果。所有的SQL均使用查询优化器,由它决定对指定数据存取的最快速度的手段。用户不需要关心表是否有索引,有什么类型的索引。

在本程序中,我们主要完成的是数据记录的查询、修改、插入和删除,下面先简单介绍一下这四种操作的SQL语法。

(1)查询—SELECT语句

Select <字段名> from <数据表名>  where  <条件>

<字段名>中,允许指定一个字段或多个字段,也可用“*”符号代表所有字段;

where 子句指明查询的数据记录的范围,可通过关系操作符把多个条件联接在一起构成复杂条件查询,以可使用inlikebetween等实现模糊查询。

如:Select  *  from 教务处人员情况表 where  职称=”讲师  and 姓名  like  %”,功能是从教务处人员情况表中,查找职称为讲师且姓张的教师的记录。这里职称、姓名为表中的字段名称。

(2)修改—UPDATE语句

Update  <数据表名>  set  <修改内容>  where  <条件>

<修改内容>中,指明欲修改的字段名称和对此字段的新赋值。基本格式为:字段名=”该字段新值,新值要用引号引起来。多个字段之间要用逗号分隔。

如:Update 教务处人员情况表 set 职称=”讲师”,军衔=”上尉” where 姓名=”张建安,功能是找到姓名为张建安的记录,把职称修改为讲师,军衔修改为上尉。

(3)插入—INSERT语句

Insert into <数据库表名><(需赋值的字段名称)> value (对应字段的值)

如有多个字段,字段之间及字段值之间需用逗号分隔,各字段值使用引号引起来。如包含全部字段,此时可省略字段名称部分。

如:insert into 教务处人员情况表(姓名,年龄,性别) value(“张建安”,”28”,””),功能是插入一条新记录,此记录姓名为张建安,年龄为28,性别为男。

(4)删除—DELETE语句

Delete from <数据表名> where <条件>

二、ASP的简单介绍

 ASPWWW服务器端的脚本运行环境,一个ASP文件实际就是嵌入可执行脚本HTML文档,以 .ASP为扩展名,将HTML语言、脚本语言和 ActiveX控件组合起来。ASP属于ActiveX技术中服务器端的技术,服务器端根据ASP源程序,不需编译,直接在脚本语言引擎的解释下运行,并把动态生成的WWW页面传送到客户端浏览器。如果脚本中含有访问数据库的请求,则通过ODBC连结后台数据库,由数据库访问组件ADO执行访问数据库操作。最后,ASP依据访库的结果集自动生成标准的HTML页面发送到客户器浏览。ASP自身提供了VBScript Jscript驱动,其中VBScript 是缺省的脚本语言。在ASP文件中,脚本命令语句必须包含在“<% %>”之中,也可用Include 命令在某处引入另一份文件的内容作为该文件的一部分,以省去在许多页面编写相同段落的重复工作。

ASP 和其他开发方法相比,主要有如下优点:

l         简易性:不需要编译或链接即可执行。可以使用普通的文本编辑器设计;

多语言性:由于ASP仅是一种开发环境而非一种语言,因此只要WWW服务器端中安装了相应的脚本引擎,就可使用任何一种脚本语言。且ASP中已安装了VBScript JScript引擎;

l         与浏览器无关性:用户端只要使用常规的可执行HTML代码的浏览器,即可浏览ASP所设计的网页内容,而脚本语言只在站点的服务器端执行,用户浏览器不需执行这些脚本语言;

l         面向对象性和可扩充性:ASP采用了面向对象的设计方法,并且提供的多个内置对象供用户使用。ASP脚本中可以方便地引用系统控件和ASP的内置控件,还能够通过插入ActiveX服务器控件来扩充其功能。而ActiveX控件可使用各种语言开发工具进行开发。

l         安全性:ASP的源程序代码,不会传到用户的浏览器,用户端看到的仅仅是执行结果的HTML代码。因此可以避免自己设计的程序代码不会被剽窃,也提高了系统的安全性;

 

ASP 的内置对象和应用组件

ASP提供了5个内置对象和5个内置服务器组件,不需要编写复杂程序段,就可以直接使用这些功能强大组件和对象。这五个内置对象是:

1、Request对象:从客户端用户(Web页面)读取信息,有两种方式。其一是读取附带在网址后面的参数;其二是读取HTML输入表单FORM 里的关键字段内容,如语句Request.Form(“name”)可以取得用户填在文本框name 里的内容。在本程序中,主要使用第二种方式接收用户界面信息。(在第二种方式情况下要与<Form></Form>搭配,可参看有关HTML说明书。)(见后程序)

2、    Response 对象:将信息送给客户端用户,Response write方法可以直接向HTML文档插入字符串,其格式为:Response.Write数据,如语句Response.Write Now,向浏览器输出了当前时间;Response还提供了控制流程的方法: Response.Redirect 网址,将当前网页转到另一个网页;Response.End则中止当前的ASP处理。在本程序中,使用Redirect来控制WEB 之间的调用关系。(见后程序)

3、Server对象:提供Web服务器工具。 Server对象有2个重要方法: MapPath CreateObjectMapPath用来将Web Server的虚拟路径还原成实际路径。 CreateObject 用来产生服务器组件的对象实例,服务器组件可以连接服务器数据库、使用网络功能或访问服务器文件系统。要调用服务器组件,必须先产生组件对象实例,即Server.CreateObject(ObjectID),其中ObjectID指定了组件标识,它可以是各种形式的可执行程序,组件产生后,就可以使用它的方法和属性进行工作。

4、    Session 对象:存储在一次会话(Session)期间的用户信息,仅被该用户访问。 Session对象最主要的用途是提供某一次连结所有网页之间的公用信息,可以实现多个应用程序间的公用变量的值的传递。在本程序中,使用了多个Session对象,如 Session(“table”)在各个网页间传递了数据表名,而Session(“sql”)用来在各个网页间传递由上一步所得出的SQL语句,以最后生成可执行SQL语句。

5、Application对象:管理所有的会话信息,供所有用户共享。

ASP提供了5个内置服务器组件:

l         数据库访问组件

l         旋转看板组件

l         浏览器兼容组件

l         文件访问组件

l         文件超链接组件

在本程序中,我们关心的是数据库访问组件ADO DB及其应用方法,在后续程序我们会看到实例。

三、ASPSQL结合操作数据库

 ASP通过ActiveX控件ADOODBC对话,实现同数据库的连接。对于任何一种DBMS,只要安装了相应的ODBC驱动程序,均可与ASP相连。ADO是系统提供的用于访问后台数据库的控件,它运行于服务器端,提供数据库信息的页面内容,通过执行SQL命令,可以在浏览器上动态地查询(Select)、修改(Update)、删除(Delete From)和插入(Insert into)数据库的记录信息。在ASP中,ADO可以看作是一个服务器控件,应用其中的各种属性的对象,即可轻松完成对数据库复杂的操作。

实现ASP动态数据库操作主要有以下几步:

(1)设置数据库源名(DSN

Windows 9XWindows NT系统中,运行“控制面板//ODBC数据源管理器”,按提示添加“系统DSN”即可;

(2)创建数据库连接(Connection

 Set Conn=Server.CreateObject(“ADODB.Connection”)

(3)调用Open方法打开数据库

如:Conn.Open “数据源名称”

(4)创建数据对象(数据集)

如:Set rs=Conn.Execute(“SQL语句”)

(5)数据库操作

(6)关闭数据对象和连接。

Rs.close

Conn.close

Set Conn=Nothing

五、程序实例

下面给出了一个在Windows NT 服务器基础上构建的Intranet网络中,几个ASP程序的源文件,结合SQL语句,可以实现对教学信息数据库的动态操作,包括查询、录入、修改及删除。从此例程中,可看到SQL结合ASP后的强大功能,而实现却很简单。

 为简单起见,数据库采用微软ACCESS数据库,文件名为“mybase.mdb”,内含一个表,名称为“教务处人员情况表”。

     下面是各程序之间的调用关系

 

Operate.asp

选择SQL语句

Conditionselsec.asp

查询条件输入

Conditionupdate.asp

修改值及修改条件

Conditioninsert.asp

新记录值输入

Conditiondelete.asp

删除条件输入

Downpage.asp

向后翻页

Uppage.asp

向前翻页

Operatebrowse.asp

执行SQL后结果

 

 

 

 

 

 

 

 

 

 

 

 

 


1、  选择SQL语句操作类型 operate.asp (节选)

Request接受用户选择信息,根据用户不同的选择,生成对应的SQL语句头,并保存在公共变量Session(“sql”)中,以便通过后续处理生成完整的SQL语句。另一个公共变量Session(“table”),存放表名,这样处理程序通用性要强一些。

<%session("opt")=request("operatetype")

if session("opt")<>"" then

    if session("opt")="select"  then 

        session("sql")="select * from "&session("table")&" where true "

        response.redirect "conditionselect.asp"

    end if

    if session("opt")="insert"  then 

        session("sql")="insert into "&session("table")&" values( "

        response.redirect "conditioninsert.asp"

    end if

    if session("opt")="delete"  then 

        session("sql")="delete from "&session("table")&" where true "

        response.redirect "conditiondelete.asp"

    end if

    if session("opt")="update"  then 

        session("sql")="update "&session("table")&"  "

        response.redirect "conditionupdate.asp"

    end if

end if%>

<%session("table")="教务处人员情况表"%>

    下面一段程序生成一个下拉式列表框和一个提交按钮,注意,第一个选项为空,这在后续程序的条件输入情况下特别重要,因为条件中可能不需此字段的值。

<form action="operate.asp" method="GET">

  <table align="center"><tr>

      <td align="right">请选择操作类型</td>

      <td><select name="Operatetype" size="1">

        <option value></option>

        <option value="select">浏览数据库</option>

        <option value="insert">插入新记录</option>

        <option value="delete">删除指定记录</option>

        <option value="update">修改指定记录</option>

      </select></td></tr></table>

  <div align="center"><center><p><input type="submit" value="确定">

</p></center></div></form>

 

    下面是运行页面图


 

    根据不同的选择项,第二步会进入不同的页面,或输入条件,或输入新值,或输入修改值。

2、  新记录值输入 conditioninsert.asp(节选)

 在此页面下,输入新记录的值,生成完整的SQL语句并执行,执行后自动进入浏览页面。函数equotchange用于把双引号换为单引号。

<%Function equotchange(data)

     equotchange="'"&replace(data,"'","''")&"'"

End Function%>

<%   name=request("name")

     if name="" then name="?"

     sex=request("sex")

     if sex=""  then sex="?"

     age=request("age")

     if age="" then age="?"

     zw=request("zw")

     if zw="" then zw="?"

     zc=request("zc")

     if zc="" then zc="?"

     jx=request("jx")

     if jx="" then jx="?"

     zj=request("zj")

     if zj="" then zj="?"

     tele=request("tele")

     if tele="" then tele="?"

     email=request("email")

     if email="" then email="?"

     BP=request("BP")

     if bp="" then bp="?"

     sqll=session("sql")

    姓名是主关键字,所以必须有值输入,否则不予处理;通过&符号把从operate.asp传送过来的SQL语句头与此页面输入的值结合,生成完整的SQL语句。

if (name<>"")and(name<>"?") then

     sqll=sqll&equotchange(name)&","

     sqll=sqll&equotchange(sex)&"," 

     sqll=sqll&equotchange(age)&","

     sqll=sqll&equotchange(zw)&","

     sqll=sqll&equotchange(zc)&","

     sqll=sqll&equotchange(jx)&","

     sqll=sqll&equotchange(zj)&","

     sqll=sqll&equotchange(tele)&","

     sqll=sqll&equotchange(email)&","

     sqll=sqll&equotchange(bp)&")"

生成SQL语句后创建数据对象,连接后执行插入操作,执行结束应关闭数据集和数据对象,然后转入浏览程序,杳看是否已插入。

set conn=Server.CreateObject("ADODB.Connection")

 conn.Open"Driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("mybase.mdb")

     conn.execute(sqll)

     conn.close

     set conn=nothing

     response.redirect "operatebrowse.asp"

end if%>

     插入值输入页面图


 

 

     插入后的记录情况

3、  修改指定记录值 conditionupdate.asp(节选)

有两个方面的问题:一方面是如何输入条件,以便找到符合条件的记录进行修改;另一方面是对应记录,应用什么值来更新。为此以表格的形式列为两栏进行处理,左栏用于选择条件,右栏用于指定新值。需要注意的是主关键字的问题,如果符合条件的记录不止一条,在右栏姓名(主关键字)栏内又指定了新值,就会造成错误。另外,为了简化程序,左栏条件只采用了“与”的形式生成总条件,在实际应用中,可根据实际情况,适当OrNotBetweenLike()等来完成更复杂的条件设置。

    部分程序如下:

<%set conn=Server.CreateObject("ADODB.Connection")

conn.Open"Driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("mybase.mdb")

        sqll="select * from "&session("table")

    set rs=conn.Execute(sqll)

    上述一小段程序对数据库的操作,目的是取出数据表中各个字段的名称来生成SQL语句,这样做的优点是程序的可维护性强、通用性好。

        name=request("name1")

        sex=request("sex1")

        age=request("age1")

        zw=request("zw1")

        zc=request("zc1")

        jx=request("jx1")

        zj=request("zj1")

        tele=request("tele1")

        email=request("email1")

        BP=request("BP1")

    从网页上接受用户输入,下面程序段生成SQL语句中的SET字段值部分,函数left( settext,len(settext)-1)用来把SETTEXT字符串中的最后一个逗号去掉。

settext=""

if name<>"" then settext=settext& rs.fields(0).name&"="&epotchange(name)&","

if sex <>"" then settext=settext& rs.fields(1).name&"="&epotchange(sex)&","

if age<>"" then settext=settext& rs.fields(2).name&"="&epotchange(age)&","

if zw<>"" then settext=settext& rs.fields(3).name&"="&epotchange(zw)&","

if zc<>"" then settext=settext& rs.fields(4).name&"="&epotchange(zc)&","

if jx<>"" then settext=settext& rs.fields(5).name&"="&epotchange(jx)&","

if zj<>"" then settext=settext& rs.fields(6).name&"="&epotchange(zj)&","

if tele<>"" then settext=settext& rs.fields(7).name&"="&epotchange(tele)&","

if email<>"" then settext=settext& rs.fields(8).name&"="

&epotchange(email)&","

if bp<>"" then settext=settext& rs.fields(9).name&"="&epotchange(bp)&","

if settext<>"" then

    settext=" set "&settext

    settext=left( settext,len(settext)-1)

end if

    下面接受用户输入,生成SQL语句所需的条件,以指明对哪些记录进行修改。

        name=request("name")

        sex=request("sex")

        age=request("age")

        zw=request("zw")

        zc=request("zc")

        jx=request("jx")

        zj=request("zj")

        tele=request("tele")

        email=request("email")

        BP=request("BP")

where=""

if name <>"" then where=where&" and  "&rs.fields(0).name&"="&epotchange(name)

if sex <>"" then where=where&" and  "&rs.fields(1).name&"="&epotchange(sex)

if age <>"" then where=where&" and  "&rs.fields(2).name&"="&epotchange(age)

if zw <>"" then where=where&" and  "&rs.fields(3).name&"="&epotchange(zw)

if zc <>"" then where=where&" and  "&rs.fields(4).name&"="&epotchange(zc)

if jx <>"" then where=where&" and  "&rs.fields(5).name&"="&epotchange(jx)

if zj <>"" then where=where&" and  "&rs.fields(6).name&"="&epotchange(zj)

if tele <>"" then where=where&" and  "&rs.fields(7).name&"="&epotchange(tele)

if email <>"" then where=where&" and  "&rs.fields(8).name&"="

&epotchange(email)

if bp <>"" then where=where&" and  "&rs.fields(9).name&"="&epotchange(bp)

if where<>""  then  where=" where true "&where

    根据条件和修改值生成完整SQL语句,执行后关闭,进入查看页面查看结果。

        rs.close

        if settext<>"" then

            sqll=session("sql")&settext&" "&where

            conn.execute(sqll)

            conn.close

            response.redirect "operatebrowse.asp"

        end if%>

    下面是修改页面和修改后的结果


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4、分页显示的方法 operatebrowse.asp uppage.asp downpage.asp

    结果显示进入operatebrowse.asp页面。为实现上一页和下一页的功能,采取了一种较简单的方法,即用uppage.asp处理向上翻页,用downpage.asp处理向下翻页。为保证翻页过程中记录处理的连续性,设置了两个公共变量,变量session(“rs”)传递一个已打开的数据集,而变量session(“line”)传递当前的记录号,以便确定翻页后的记录号。

    在程序operatebrowse.asp中,

<% set session("rs")=conn.Execute(sqll)% >建立了公共变量

在程序uppage.asp中,过程Tableprevious用于向上翻页

<%Sub Tableprevious(rs)

        dim j

        Response.Write "<CENTER><TABLE BORDER=1>"

        Response.Write "<TR BGCOLOR=#b0c4de>"

        For i=0 to rs.Fields.Count-1

            Response.Write "<TD>" & rs.Fields(i).Name & "</TD>"

        Next

        Response.Write "</TR>"

    以上部分画出表头,注意表头项名称直接取自数据库字段名称,下面一小段程序的目的是调整记录指针位置,以便重新定位显示。

        session("line")=session("line")-10

        rs.movefirst

        j=session("line")

        while j<>0

            j=j-1

            rs.movenext

        wend

    调整好记录指针后,顺序显示五条记录

        j=5

        While (Not rs.EOF) and (j<>0)

        j=j-1

        Response.Write "<TR>"

        For i=0 to rs.Fields.Count-1

            if rs.Fields(i).value<>""  then

            Response.Write "<TD>" & rs.Fields(i).Value & "</TD>"

            else

            Response.Write "<TD>" & "?" & "</TD>"

            end if

        Next

        Response.Write "</TR>"

        rs.MoveNext

        Wend

        Response.Write "</TABLE></CENTER>"

    End Sub %>

    直接根据传递来的两个公共变量,调用过程完成处理

<% if session("line")>5 then

        tableprevious(session("rs"))

        session("line")=session("line")+5

    end if%>

五、运行调试中应注意的问题

    1SQL语句合格法的检查

调试过程中,对SQL语句可以采取先显示在屏幕上检查,正确后再添加执行功能的方法,逐步进行。如SQL生成后加上一句<%Response.Write session(“sql”)%>进行观察。

2ASP的运行环境有特殊的要求,

    Windows NT Server 4.0 系统下安装IIS 3.0

     PACK 3 版本以上已内置,不须安装)

    Windows NT Workstation 系统下安装 PWS 3.0 

     PACK 3版本以上已内置)

    Windows 9X 系统下安装 PWS

  (在安装光盘下,运行 \add-ons\pws\setup.exe

3ASP程序的目录要求

程序必须存入 \Inetpub\wwwroot 下或其下的某个子目录下

4ASP程序的运行和调试

编好程序后,用“预览”方式无法查看结果,也不能用浏览器直接找到此文件查看结果,正确的方法是在浏览器地址栏内键入以下地址:“http://servername/aspname.asp”。其中,servername 是服务器名称,aspname.aspASP页面文件名称。如//server/operate.asp

 

 

 

 

 

 

 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089