C# 使用逻辑运算符的SQL搜索
我有一个asp.net web应用程序,它需要一个搜索页面来搜索特定表(SQL)中的数据。今天,它只有一个简单的查询,使用参数化sql:C# 使用逻辑运算符的SQL搜索,c#,sql,sql-server,sql-server-2008,search,C#,Sql,Sql Server,Sql Server 2008,Search,我有一个asp.net web应用程序,它需要一个搜索页面来搜索特定表(SQL)中的数据。今天,它只有一个简单的查询,使用参数化sql: SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@searchText", SqlDbType.VarChar); param[0].Value = "%" + text + "%"; using (SqlDataReader dr = SqlHelper.E
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)"
还有一个像
sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'
现在肯定有人以前做过这样的东西?我搜索过SO和Google,但都没有真正的成功。欢迎指向开源/免费代码或如何将搜索表达式转换为SQL的好主意的指针。通过And/or/()等对查询进行解析需要通过某种解析器完成。对于这样简单的事情,a应该做得很好(这是我们在筛选标记上的SE时如何处理and/or/not等,尽管对括号内的子表达式的完全支持仅在内部可用)。这将生成一个操作树,即(这里使用前缀表示,但更通常用于生成AST)
然后需要使用它来生成TSQL。这不是小事,但也不是火箭科学。您使用哪种SQL引擎,答案因数据库而异。有些支持regexp,有些不支持。
and("Douglas", or("adam", "adams"))