你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
也谈基于ASP的SQL Server数据库多条件模糊查询
 

  :本文首先介绍了数据库编程的基本内容,然后结合作者的编程实践,给出了一种行之有效的数据库多条件模糊查询方法,做到了ASPSQL Server的完美结合。

关键词:ASP   SQL Server数据库  编程

 

一、引言

 

    贵刊第八期《利用ASP对数据库进行模糊查询和分页显示》一文提供了一种数据库模糊查询的方法。我在编程实践中利用数据库的存储过程对象实现了同样的功能。由于存储过程比一般的SQL命令更高效,所以当数据库记录很多时,利用存储过程可能是一种更好的方法。本文实现的多条件查询,可以输入任意个条件,更加灵活方便。

 

 

二、SQL Server数据库的模糊查询

 

    所用的实例数据库名为authodb,authos的结构为:

 

字段名      类型      描述

 

Name       char      主键

 

Sex        char    

 

Birthday   datetime

 

Address    char

 

Telephone  char

 

    SQL Server 数据库的Select查询命令可以实现数据库的查询。在Select命令的Where子句中使用“LIKE”关键词和“%”通配符就可以做到模糊查询。下面语句在authodb数据库的authors表中查找Name字段的值含有“Smith”字符串的所有记录。

 

Use authodb

 

Select * From authors

 

Where Name LIKE “%Smith%”

 

GO

 

    SQL Server数据库提供了一种叫做Stored Procedure(存储过程)的数据库对象,用户可以将一些常用的命令过程以存储过程的形式存储起来,需要运行这些存储过程时,只要输入存储过程名即可。这样不仅简化了操作,而且提高了效率(存储过程的运行比一个个的命令高效得多)。存储过程名的选取应符合SQL Server的命名规则,当它以”#”开头时,表示一个临时存储过程,它只在应用程序运行时存在,程序结束后,被自动删除。

 

    下面的语句创建一个名字为#query的临时存储过程:

 

Create Procedure #Query

 

As

 

Select * From authors

 

Where Name LIKE “%Smith%”

 

     运行存储过程#query同样可以查询Name字段中含用”Smith”的记录。

 

三、数据库模糊查询的ASP实现

 

    利用ADO组件的Connection对象、RecordSet对象分别动态创建、运行数据库的临时存储过程对象,不仅实现了多条件模糊查询,而且交互性极强。下面我就详细地介绍给大家,希望能对你们有所帮助。

 

(1)创建一个用户交互页面INPUT.HTM

 

<html>

 

<head>

 

<title>用户输入界面</title></head>

 

<body>

 

<center><font face="隶书" size=+3>数据库查询</font></center>

 

<form method="post" action="query.asp">

 

按字段<select name="leixing" size=5 multiple>

 

        <option value="Name>姓名</option>

 

        <option value="sex">性别</option>

 

        <option value="birthday">生日</option>

 

                        <option value=address>住址</option>

 

        <option value=telephone>电话</option>

 

          </select>进行查询<br>

 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<font size=-2>条件间用中文""隔开,按上表的顺序依次输入<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

 

例如:“马刚勇,男,73/1/19</font><br>

 

关键词<input type="text" name="keyword" size=40 value=”马刚勇“><br>

 

<input type="submit" value="查询">

 

<input type="reset" value="清除">

 

</form>

 

</body>

 

</html>

 

    当用户在此客户端页面上输入数据后,这些数据通过Form数据集合由“POST”方法传递到服务器端的query.asp页面。由query.asp来完成查询功能。

 

(2)修改Global.asa文件,以初始化”num”变量,并将session对象的timeout属性设为120分钟。

 

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

 

SUB Session_OnStart

 

session("num")=0

 

session.timeout=120

 

END SUB

 

SUB Session_OnEnd

 

session.timeout=5

 

END SUB

 

</SCRIPT>

 

(3)创建Query.asp文件,实现模糊查询

 

<html>

 

<head>

 

<title>多条件模糊查询</title>

 

</head>

 

<body>

 

<%

 

response.write "<center><font face=""隶书""size=+2>查询结果</font></center>"

 

'--------------------- 获取Form数据 -------------------

 

DIM  qucol(20)

 

DIM  str,str2,length,strt,location

 

DIM  key(10),str4(10),quenum,str5

 

for I=1 to request.form("leixing").count

 

         qucol(I)=request.form("leixing")(I)

 

next

 

str=request.form("keyword")

 

str2=""

 

length=len(str)

 

While Instr(length,str,str2)<>0

 

Str=mid(str,1,length-1)

 

Length=length-1

 

Wend

 

strt=1

 

I=1

 

while Instr(strt,str,str2)<>0

 

        location= Instr(strt,str,str2)

 

        key(I)=mid(str,strt,location-strt)

 

        str=mid(str,location+1,length-location)

 

        I=I+1

 

Wend

 

if Instr(strt,str,str2)=0 then

 

        key(I)=str

 

end if

 

if I<>request.form("leixing").count then

 

response.write"<center><font size=+2 face=""黑体"">"&_

 

              "错误:</font><font size=+1>你输入的条件数和选择的类型数不相等!<br><br>"&_

 

                                "</font></center>"

 

else

 

'--------------- 生成Where子句-------------------

 

quenum=I

 

for I=1 to quenum

 

 str4(I)=qucol(I)&"  LIKE  "&"""%"&key(I)&"%""" 

 

next

 

str5=str4(1)

 

for I=2 to quenum

 

str5=str5&" AND "&str4(I)

 

next

 

'建立数据库连接。carlos:数据源名;sa:用户名;authodb:数据库名

 

Set  Conn= Server.CreateObject("ADODB.Connection")

 

Conn.Open "DSN=carlos;UID=sa;PWD=;Database=authodb"

 

for I=0 to conn.errors.count-1

 

response.write conn.errors(I).description&"<br>"

 

next

 

'----创建临时存储过程----------

 

CommandText="CREATE PROCEDURE #query"&session("num")&_

 

            " AS select * From authors Where "&str5 

 

Conn.execute CommandText,0,-1

 

 

 

'-------创建RecordSet对象---------

 

Set rs=Server.CreateObject("ADODB.RecordSet")

 

 

 

'------运行临时存储过程-------------

 

Const adOpenDynamic=2

 

Const adLockOptimistic=3

 

const adComdStoredProc=8

 

CommandText="#query"&session("num")

 

session("num")=session("num")+1

 

rs.Open CommandText,Conn,adOpenDynamic,adLockOptimistic,_

 

         adComdStoredProc

 

 

 

'----------显示查询结果 -----------------------------

 

response.write "<table border=""1"">"

 

response.write"<tr>"

 

for I=0 to rs.fields.count-1

 

response.write "<td>"&rs(I).Name&"</td>"

 

next

 

response.write "</tr>"

 

while not rs.EOF

 

response.write"<tr>"

 

for I=0 to rs.fields.count-1

 

        css=rs(I).value

 

        if css<>"" then

 

        response.write "<td>"&css&"</td>"

 

        else

 

        response.write "<td>.</td>"

 

        end if

 

next

 

rs.moveNext

 

response.write "</tr>"

 

Wend

 

response.write"</table>"

 

rs.close

 

set rs=nothing

 

set Conn=nothing

 

end if

 

%>

 

<!-- 查询结束,返回输入界面,开始下次查询 -->

 

<a href="input.htm">返回到查询</a>

 

</body>

 

</html>

 

    由于返回后再次查询时,又一次运行query.asp,为避免每次执行query.asp时创建同名的存储过程,每次创建,临时存储过程名的序号加一,即依次为#query1(#query2,#query3,.)。由于我们创建的是临时存储过程,当用户查询结束退出时,这些存储过程会自动删除,不会对数据库造成任何影响。

 

四、后记

 

    Query.asp,Global.asa文件必须放在有执行权限的虚拟路径下,Global.asa必须放在此路径的根目录下,而且同一个虚拟路径只能有一个Global.asa文件。

在实际应用中,我们往往要实现数据库的多表联合查询,以同时取得多个表的数据记录。对上述程序略加修改,可以很好地实现。

  推荐精品文章

·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