【发布时间】:2012-01-10 10:55:05
【问题描述】:
我有一个 asp.net Web 应用程序,它需要一个在特定表 (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)
向表添加全文索引不是首选选项,因为我不控制数据模型。
我正在寻找一种解释文本查询并将其转换为具有适当数量的 SqlParam 的 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'
现在肯定有人做过这样的事情?我搜索了 SO 和 Google,但没有任何真正的成功。欢迎提供指向开源/免费代码或如何将搜索表达式转换为 SQL 的好主意的指针。
【问题讨论】:
-
您使用哪个 SQL 引擎,答案因数据库而异。有些支持正则表达式,有些不支持。
标签: c# sql sql-server sql-server-2008 search