深夜,朋友电话求助:网站的搜索出问题了!
朋友做了一个大型的音乐下载网站,很红火,其网站的核心代码是我写的,谁都知道asp的代码一般很稳定,如果不改动或者更换环境是不会出现什么问题的。可是这次的问题真的很怪,音乐按“标题”无法查询,但是按“歌星”,按“拼音”之类的都是正常的。比较了代码:"select * from yinyue where title Like '%"& keyword &"%' order by articleid desc",实在看不出什么毛病。不使用like,直接用=倒是可以,看来是模糊查询出错了。但是为什么会这样呢?
早上醒来,第一件事就是到google上搜索,运气还算不错,很快的就看到一篇标题为《Jet SQL 的 bug? 》blog,描述如下:
日前遇到一有PAccess的奇怪}在@e和各位一下,
在AccessY料中若某位的Y料含有某日文字r就o法使用 like l件而a生“Out of memory“的r
也就是您有一PY料含有字元rol件是否符合都致e`l生, 我提供一例Ky下面的例子:
1. select * from test (不使用l件的情r下正常)
2. select * from test where a like '%1%' (a生e`“Out of memory“)
3. dataset + datatable.select (l件同第二c但分次理)
不得@是不是 Jet 的bug? 我yADO OLEDB, ADO.NET OLEDB/ODBC, 三N方式例子2同都o法成功
相同Y料容c搜l件在SQLServer/MySQLt不出F}.
我目前的解Q方法是行DataSetK配合DataTable 的Select方法取代 wherel件,
@Nm然出o`但效能相形之下s的^差, 不^@是我目前想到的唯一k法,
各位若此}有d趣的可以下d行例http://www.tiantian.cn/dotnet/test.zip(含source)
若您有更好的做法或解Q方式g迎信...
因为朋友无意中咕哝了一句,是不是今天加了一千多首的日文歌曲的问题?呵呵,果真是小日本引起的BUG!
接下来就可以简单解决问题了,将代码更改为:
sql="select * from tablename"
rs.filter = " column like '%"&word&"%'"