我有一个asp.net网络应用程序,需要一个搜索页面来在特定表格(SQL)中搜索数据。今天它只有一个简单的LIKE查询,使用参数化的SQL:
SqlParameter[] param = new SqlParameter[1];
param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";
using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
//Do something
}
现在我需要添加使用逻辑运算符进行搜索的选项。
因此,在文本框中,用户可以搜索以下内容:
Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)
由于我无法控制数据模型,因此将全文索引添加到表中并不是首选选项。
我正在寻找一种将文本查询解释并转换为带有适当数量的SqlParams的SQL语句的方法。
searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)
会返回类似以下内容:
sqlquery = "SELECT someFields FROM table WHERE someField=@Param1 AND (someField=@Param2 OR someField=@Param3)"
还有一个类似于 sqlParams 的参数
sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'
现在一定有人做过类似的事情吧?我已经在Stack Overflow和Google上搜索了很久,但没有取得真正的成功。欢迎提供开源/免费代码或者关于如何将搜索表达式转换为SQL的好主意。