模糊查询中为什么"C++"查不出来,但是C可以查出来,声明不是因为空格的问题.

Hao_ni 2003-06-18 12:13:45
谢谢大虾
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
大虾们帮我看看....
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
点击查询按钮


private void btSubmit_Click(object sender, System.EventArgs e)
{
string strSex="";
string strDegree="";
string strEnglish="";
string strSkill="";
string strTech="";
string query="";

foreach(ListItem item in rblDegree.Items)
if(item.Selected)strDegree=item.Text;
foreach(ListItem item in rblSex.Items)
if(item.Selected)strSex=item.Text;
foreach(ListItem item in rblEnglish.Items)
if(item.Selected)strEnglish=" and english like'%"+item.Text+"%'";
foreach(ListItem item in cblTech.Items)
if(item.Selected)strTech+=" and tech like'%"+item.Text+"%'";

strSkill=txtSkill.Text;
//生成查询语句txtSkill为文本框控件接收查询关键字
if(strSkill!="")
query=" and skill like '%"+txtSkill.Text+"%'";
if(strTech!="")
query+=strTech;
if(strSex!="不限")
query+=" and sex='"+strSex +"'";
if(strDegree!="不限")
query+=" and degree='"+strDegree+"'";
if(strEnglish!="")
{
query+=strEnglish;
}

if(query!="")
query=" where id<>'xxxxxxx'"+query;
Response.Redirect("list.aspx?query="+query);
}


转到查询页面

if(!Page.IsPostBack)
{
string filedata="../data/db.mdb";
string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(filedata)+";Persist Security Info=False;";
OleDbConnection conn=new OleDbConnection(strConnect);
string query=Request["query"];
query="select id, name,sex,degree,email,english from chinese "+query;
try
{
conn.Open();
OleDbDataAdapter da=new OleDbDataAdapter(query,conn);
DataSet ds=new DataSet();
da.Fill(ds,"chinese");
dgChinese.DataSource=ds.Tables[0].DefaultView;
dgChinese.DataBind();
conn.Close();
}
catch(Exception ee)
{
Response.Write(ee.ToString());
}

}


问题在于我在文本框输入"C++"时,如果待搜索区域有“C++”却搜索不出来,但是可以搜索出“+”以及“C”.我想在搜索前对输入的指定搜索关键字先进行一次处理.让你输入的“C++”搜索关键字被完整的拿去匹配整个待搜索区域。可是txtSkill.Text.后的方法只有Trim,TrimEnd,ToString等等....请知道的兄弟帮帮忙.20分太少,不够再加!
ArLi2003 2003-06-18
  • 打赏
  • 举报
回复
like 'C[+][+]'
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
非常感谢!yxrj()和ArLi2003(阿利 风雨中的无爪飞龙) ( )两位大哥!
yxrj 2003-06-18
  • 打赏
  • 举报
回复
问题在这
if(query!="")
query=" where id<>'xxxxxxx'"+query;
Response.Redirect("list.aspx?query="+query);



'+'是不能通过url传递的(+代表空格)
所以要编码
query=" where id<>'xxxxxxx'"+query;
Response.Redirect("list.aspx?query="+Server.UrlEncode(query));
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
已经搞定了.不过这个方法不够精确.因为当别人确定要找一个C++的人的时候,查询实际上是用C在查询.所以所有简历技能介绍中有C这个字母的人都被找出来.不爽啊.我想实现的是精确查找.即他输入C++找到的人的技能介绍中肯定有C++但是不一定有C.

能再提提意见么?
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
这种方法应该也可以...关键在与对于这样的待查询块:

熟悉C++和Java. 能用C++和Java进行概念上的
面向对象程序设计,熟悉ASP.NET,熟悉C#相关
开发,熟悉Perl,Javascript等脚本语言. 对
统一建模语言(UML)和统一软件开发过程(RUP)
有一定的了解,习惯XP. 有一定的Visual C++
/MFC开发经验,了解STL/GP,能使用Rational
Rose进行系统分析。

当我输入Java然后查询的时候就可以找到,C也可以.就是C++不行!我提交这个信息块(Skill.Text)到数据库之前如何将转义字符处理呢?这样可以么?

Skill.Text.Replace("\+","");

这样将+替换为空,查C++的时候就变成查C.也就C和C++的都出来了.
Hao_ni 2003-06-18
  • 打赏
  • 举报
回复
可能是+号起了转义字符的作用,因为我发现可以找到“+”但是找不到“++”和“C+”以及“C++”
希望大虾帮帮忙
tanrui 2003-06-18
  • 打赏
  • 举报
回复
我认为在提交到数据库以前,应该把输入的字符串处理一下,把"|","'","+"等等都转成转义字符

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧