在这儿先说几句废话.作为初学者,刚开始接触时,根本就不知道该怎么入手.在我的系列中,我主要根据自己在学习时碰到的问题和疑惑展开并进行分析.相信初学者一定会受益非浅的.
前边已经提过的,操作数据库的字符串被缓存了起来,这就大大提高了运行效率.但当看到search.aspx时,又出现了问题:keywords的提取和分离.
我们在百度搜索时肯定用过多个关键字的查询吧!(如:我要查:petshop 参数。注意在这两个关键字之间有一个空格)在这里就是实现了同样的功能。分析后感觉很巧,特拿来分享阿。。。
在取得关键字后首先进行了过滤,替换掉危险字符
WebComponents.CleanString.InputText(Request["keywords"], 100);
然后调用
IList productsBySearch = product.GetProductsBySearch(searchKey);
{string[] keywords = text.Split();} //通过空格分离text的内容,这里很麻烦的
到了SQLServerDAL后,通过stringbuilder进行连接字符串
private const string SQL_SELECT_PRODUCTS_BY_SEARCH1 = "SELECT ProductId, Name, Descn FROM Product WHERE ((";
private const string SQL_SELECT_PRODUCTS_BY_SEARCH2 = "LOWER(Name) LIKE '%' + {0} + '%' OR LOWER(Category) LIKE '%' + {0} + '%'";
private const string SQL_SELECT_PRODUCTS_BY_SEARCH3 = ") OR (";
private const string SQL_SELECT_PRODUCTS_BY_SEARCH4 = "))";
StringBuilder sql = new StringBuilder(SQL_SELECT_PRODUCTS_BY_SEARCH1);
for (int i = 0; i < numKeywords; i++) {
sql.Append(string.Format(SQL_SELECT_PRODUCTS_BY_SEARCH2, PARM_KEYWORD + i));
sql.Append(i + 1 < numKeywords ? SQL_SELECT_PRODUCTS_BY_SEARCH3 : SQL_SELECT_PRODUCTS_BY_SEARCH4); }
这里实现了其核心的功能。通过循环,把字符串中的格式符用变量文本替换掉
最后在给参数数组赋值。