|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。程序 用ASP完成搜刮引擎的功效是一件很便利的事,但是,怎样完成相似3721的智能搜刮呢?好比,当在搜刮前提框内输出“中国国民”时,主动从中提取“中国”、“国民”等关头字并在数据库内举行搜刮。看完本文后,你就能够发明,这个功效完成起来居然是云云的复杂。
第一步,我们要创建一个名为db_sample.mdb的数据库(本文以Access2000数据库为例),并在个中创建表T_Sample。表T_Sample包含以下字段:
ID主动编号
U_Name文本
U_Info备注
第二步,我们入手下手计划搜刮页面Search.asp。该页面包含一个表单(Frm_Search),表单内包含一个文本框和一个提交按钮。并将表单的method属性设为“get”,action属性设为“Search.asp",即提交给网页本身。代码以下:
<!--Search.asp-->
<formname="frm_Search"method="get"action="Search.asp">
请输出关头字:
<inputtype="text"name="key"size="10">
<inputtype="submit"value="搜刮">
</form>
上面,就进进了完成智能搜刮的关头部分。
起首,创建数据库毗连。在Search.asp的入手下手处到场以下代码:
<%
DimstrProvider,CNN
strProvider="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
strProvider=strProvider&Server.MapPath("")&"datadb_Sample.mdb"假定数据库寄存在主页根目次下的data目次下
SetCNN=Server.CreateObject("ADODB.connection")
CNN.OpenstrProvider翻开数据库毗连
%>
接上去,判别ASP页所吸收到的数据,并在数据库中举行搜刮。
<%
DimS_Key,RST,StrSQL
S_Key=Trim(Request("key"))失掉搜刮关头字的值
IfS_Key<>""then
SetRST=Server.CreateObject("ADODB.RecordSet")
StrSQL=AutoKey(S_Key)此处利用自界说函数AutoKey(),该函数为完成智能搜刮的中心
RST.OpenStrSQL,CNN,3,2失掉搜刮后的纪录
IfRST.BOFAndRST.EOFThen
%>
<fontcolor="#FF0000">未找就任何了局!!!</font>
<%
Else
%>
搜刮称号为“<fontcolor="#FF0000"><%=S_Key%></font>”的项,共找到<fontcolor="#FF0000"><%=RST.RecordCount%></font>项:<p>
<%
WhileNotRST.EOF遍历全部纪录集,显现搜刮到的信息并设置链接
%>
<!--此处可设为你所必要的链接方针-->
<fontstyle="font:12pt宋体"><ahref="info.asp?ID=<%=RST("ID")%>"target="_blank"><%=RST("U_Name")%></a></font>
<!--显现部分具体内容-->
<fontstyle="font:9pt宋体"><%=Left(RST("U_Info"),150)%></font><p>
<%
RST.MoveNext
Wend
RST.Close
SetRST=Nothing
EndIf
EndIf
%>
在下面的代码中,有一个自界说函数AutoKey,该函数是完成智能搜刮的中心地点。代码以下:
<%
FunctionAutoKey(strKey)
CONSTlngSubKey=2
DimlngLenKey,strNew1,strNew2,i,strSubKey
检拆字符串的正当性,若分歧法例转到堕落页。堕落页你能够依据必要举行设定。
ifInStr(strKey,"=")<>0orInStr(strKey,"`")<>0orInStr(strKey,"")<>0orInStr(strKey,"")<>0orInStr(strKey," ")<>0orInStr(strKey,"")<>0orInStr(strKey,chr(34))<>0orInStr(strKey,"")<>0orInStr(strKey,",")<>0orInStr(strKey,"<")<>0orInStr(strKey,">")<>0then
Response.Redirect"error.htm"
EndIf
lngLenKey=Len(strKey)
SelectCaselngLenKey
Case0若为空串,转到堕落页
Response.Redirect"error.htm"
Case1若长度为1,则不设任何值
strNew1=""
strNew2=""
CaseElse若长度年夜于1,则从字符串首字符入手下手,轮回取长度为2的子字符串作为查询前提
Fori=1TolngLenKey-(lngSubKey-1)
strSubKey=Mid(strKey,i,lngSubKey)
strNew1=strNew1&"orU_Namelike%"&strSubKey&"%"
strNew2=strNew2&"orU_Infolike%"&strSubKey&"%"
Next
EndSelect
失掉完全的SQL语句
AutoKey="Select*fromT_SamplewhereU_Namelike%"&strKey&"%orU_Infolike%"&strKey&"%"&strNew1&strNew2
EndFunction
%>
要完成智能搜刮,其中心就是将搜刮关头字举行主动分组。在此处,我们利用了轮回取长度为2的子串的办法。为何不将子串长度定为1、3、4或其他呢?这是由于若子串长度小于2即为1时,会得到将关头字分组的功效,而若子串长度年夜于2,则会丧失一些词组。人人能够将CONSTlngSubKey=2改成其他数字试一试,孰优孰劣自见分晓。
最初,别忘了将数据毗连封闭,以开释资本。
<%
CNN.Close
SetCNN=Nothing
%>
至此,这个智能搜刮引擎已完成了。你还能够将其持续完美,好比增加分页、凸起显现等功效。好了,不延误人人工夫了,从速往试一试吧。asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。 |
|