首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 数据库教程
结合asp和存储过程做的搜索程序-ASP教程,数据库相关
作者:网友供稿 点击:19
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
比较复杂,可以支持多种逻辑符,包括 + - and or 空格等,并且根据需要随便增加。可以根据条件选择在那个表中搜索,对速度也做了优化,可以说是很快的。当然因为是以前写的,存在不少毛病。存储过程中用到几乎所有sql server的特性,如光标(记录集分页)等。好了,不吹了,自己看程序吧。

asp 函数
function analysekeyword(a_strsource)
dim m_strdest , m_intloop
dim m_intbeginpos , m_intendpos
dim m_strhead , m_strmiddle , m_strtail
m_strdest = a_strsource

------------------------------处理空格------------------------------------------------------

首先去掉头尾空格
m_strdest = ltrim(rtrim(m_strdest))

将& , " and " 等替换成 +、 -、空格
m_strdest = replace(m_strdest , "&" , "+")
m_strdest = replace(m_strdest , " and " , "+")
m_strdest = replace(m_strdest , " or " , chr(32))
m_strdest = replace(m_strdest , " not " , "-")

初始化变量,以使下面的循环进行
m_intbeginpos = 1

do while m_intbeginpos <> 0
m_intbeginpos = instr(m_strdest ,chr(32))
if m_intbeginpos <> 0 then 如果找到空格
m_strhead = rtrim(ltrim(left ( m_strdest , m_intbeginpos )))
call print("[analysekeyword()]:处理空格m_strhead = " + m_strhead)
m_strtail = rtrim(ltrim(right (m_strdest , len(m_strdest) - m_intbeginpos)))
call print("[analysekeyword()]:处理空格m_strtail = " + m_strtail)
m_strdest = m_strhead + "*" + m_strtail
else
exit do
end if
loop
m_strdest = replace (m_strdest , "*" , chr(32))
call print("[analysekeyword()]:处理空格完毕后m_strdest = " + m_strdest)
-------------------------------空格处理完毕-------------------------------------------------

-------------------处理单双引号-----------------------------------------------------

首先将单引号替换为双引号
m_strdest = replace ( m_strdest , chr(39) , chr(34))

置一个初值以使循环进行
m_intbeginpos = 1
m_intendpos =1
m_strhead = ""
m_strtail = ""
do while m_intbeginpos <> 0 and m_intendpos <> 0
如果发现双引号,则记下开始位置,查找下一个双引号
m_intbeginpos = instr(m_strdest , chr(34))
if m_intbeginpos <> 0 then 如果找到第一个引号

call print("[analysekeyword()]:第一个引号出现的位置:" + cstr(m_intbeginpos))

m_intendpos = instr(m_intbeginpos + 1 , m_strdest ,chr(34))
if m_intendpos <> 0 then 如果找到第二个引号

call print("[analysekeyword()]:第二个引号出现的位置:" + cstr(m_intendpos))

将整个字符串按引号分隔成三段
call print ("[analysekeyword()]:处理引号m_strdest = " + m_strdest)
m_strhead = left(m_strdest , m_intbeginpos - 1)
call print ("[analysekeyword()]:处理引号m_strhead = " + m_strhead)
m_strmiddle = mid(m_strdest , m_intbeginpos + 1 , m_intendpos - m_intbeginpos - 1)
call print ("[analysekeyword()]:处理引号m_strmiddle = " + m_strmiddle)
m_strtail = right(m_strdest , len(m_strdest) - m_intendpos)
call print ("[analysekeyword()]:m_strtail = " + m_strtail)

如果在引号中有+号则作为字符处理,暂时替换成其他字符
m_strmiddle = replace(m_strmiddle , "+" , "|")
m_strdest = m_strhead + replace(rtrim(ltrim(m_strmiddle)) , chr(32) , "#") + m_strtail

else
exit do
end if
else
exit do
end if
loop
m_strdest = replace(m_strdest , chr(34) , "+")
call print ("[analysekeyword()]:处理引号完毕后m_strdest = " + m_strdest)

-------------------------------引号处理完毕-------------------------------------------------

-------------------------------处理多个加号及加号两边的空格问题-----------------------------


处理多个加号的问题,遇到多个加号则认为是字符串,而不是逻辑符
m_strdest = replace (m_strdest , "+++" ,"|||")
m_strdest = replace (m_strdest , "++" , "||")
call print ("[analysekeyword()]:处理多个减号完毕后m_strdest = " + m_strdest + "")

处理加号两边的空格
m_strdest = replace(m_strdest , " +" , "+")
m_strdest = replace(m_strdest , "+ " , "+")
m_strdest = replace(m_strdest , " + " , "+")
call print ("[analysekeyword()]:处理减号两边的空格完毕后m_strdest = " + m_strdest + "")

-------------------------------处理加号完毕-----------------------------

-------------------------------处理多个减号及减号两边的空格问题-----------------------------


处理多个减号的问题,遇到多个减号则认为是字符串,而不是逻辑符
m_strdest = replace (m_strdest , "---" ,"~~~")
m_strdest = replace (m_strdest , "--" , "~~")

call print ("[analysekeyword()]:处理多个减号完毕后m_strdest = " + m_strdest + "")

处理减号两边的空格
m_strdest = replace(m_strdest , " -" , "-")
m_strdest = replace(m_strdest , "- " , "-")
m_strdest = replace(m_strdest , " - " , "-")
call print ("[analysekeyword()]:处理加号两边的空格完毕后m_strdest = " + m_strdest + "")

-------------------------------处理减号完毕-----------------------------

------------------------------处理字符串两头的加减号问题-----------------
if len(m_strdest) >= 3 then
m_strhead = left(m_strdest , 1)
m_strmiddle = mid(m_strdest , 2 , len(m_strdest) - 2)
m_strtail = right(m_strdest , 1)
if m_strhead = "+" or m_strhead = "-" then
m_strhead = ""
end if
if m_strtail = "+" or m_strtail = "-" then
m_strtail = ""
end if
m_strdest = m_strhead + m_strmiddle + m_strtail
end if
----------------------------处理完毕-------------------------------------
m_strdest = replace(m_strdest , "--" , "~~")
m_strdest = replace(m_strdest , "++" , "||")
m_strdest = replace(m_strdest , chr(32) , "@")
analysekeyword = m_strdest
call print ("[analysekeyword()]:全部处理完毕后m_strdest = " + m_strdest + "")

end function
%>


存储过程
/*********************************************************************/
/* proc name : up_parsewordsearch */
/* */
/* description: 关键字搜索 */
/* */
/* parameters: @a_strcategoryid 分类id */
/* @a_intposition 调用的位置 */
/* @a_strparseword 搜索关键字 */
/* @a_introwcount 限定最多取得记录数 */
/* */
/* date: 2000/6/28 */
/* */
/* author: liuyunpeng */
/* */
/* history: */
/*********************************************************************/

if exists (select * from sysobjects where id = object_id("up_parsewordsearch"))
drop proc up_parsewordsearch
go

create proc up_parsewordsearch @a_strparseword varchar(255) ,
@a_strcategoryid varchar(255) ,
@a_intposition tinyint ,
@a_introwcount int
as
declare @m_strsqlcondition varchar(255) --sql语句的条件部分
declare @m_strsqlselect varchar(255) --sql语句的选择部分
declare @m_strsqlcategory varchar(100) --sql语句的分类部分

/*根据调用位置决定sql的选择部分*/
select @m_strsqlselect
= case
when @a_intposition = 4 then --商品库
"select productid , title = productname , description = left(description , 100) "
+ " from product where "
when @a_intposition = 5 then --商业机会库
"select id , title ,description = left(convert(varchar,content) , 100) "
+ " from businesschance where "
when @a_intposition = 6 then --公司库
"select companyid , title = companyname , description =left(description , 100) "
+ " from company where "
end

/*根据分类id决定sql的分类部分*/
select @m_strsqlcategory
= case
when @a_strcategoryid <> "0" then " categoryid like " + @a_strcategoryid + "% and "
else ""
end

/*根据调用位置决定sql的条件部分*/
select @m_strsqlcondition
= case
when @a_intposition = 4 --商品
then "(productname like %" + @a_strparseword + "%"
+ " or description like %" + @a_strparseword + "%"
+ " or producername like %" + @a_strparseword + "%) "
when @a_intposition = 5 --商业机会
then "(title like %" + @a_strparseword + "%"
+ " or keyword like %" + @a_strparseword + "%) "
when @a_intposition = 6
then "(companyname like %" + @a_strparseword + "%"
+ " or description %" + @a_strparseword + "%) "
end

set rowcount @a_introwcount
exec (@m_strsqlselect + @m_strsqlcategory + @m_strsqlcondition)
set rowcount 0
go

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp留言板源代码4-JSP教程,数据库相关
·“脱衣秀”泛滥 四川打击淫秽色情视频聊天室
·c#中使用 crystal reports (水晶报表)的打包和部署问题-.NET教程,报表/图形/Office
·MDAC2.8 下载!-ASP教程,数据库相关
·数据库安装包的制作(参考MSDN)-.NET教程,安装和部署
·asp讲座之七:asp与数据库(二)
·深度和广度优先分油问题(C#实现)-.NET教程,C#语言
·C#在状态栏中,自绘进度条,-.NET教程,C#语言
·怎么清除sql server日志
·C#中的接口-.NET教程,C#语言
最新文章
·sql server 2005 ce基础概要_数据库教程
·用flash as代码制作按钮弹出窗口_flash教程
·alexa:戏曲性地调整_alexa排名
·google也推出域名注册_google推广
·技巧总结:div中class与id的区别及应用_css教程
·windows vista命令runas.exe全解析_windows vista
·photoshop将美女照片处理成仿古斑驳油画_photoshop教程
·百度主题推广代码的完全解析-知己知彼_网赚技巧
·你的google adsense帐号是否被人盗用?_网赚技巧
·如何挑出google adsense中单价极低的广告商_网赚技巧
相关主题
  • 结合asp.net与javascript开发电子沙盘_asp.net技巧
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭