繁体   English   中英

C#实体框架中用于全文搜索的SQL字符串格式

[英]SQL String format for Full Text Search in C# Entity Framework

我正在尝试创建一个参数化的sql字符串,当在数据库服务器上执行该字符串时,我希望以此结束该字符串,该字符串在执行时将返回所需的结果:

SELECT * FROM OrderHeader WHERE FacilityId = 9 AND CONTAINS(*,'"Rich*"')

我已经尝试了下面的三种尝试和结果,但是无法像上面的目标语句那样将其显示出来,结果是第一个语句中的syntax error near '@p1'出现syntax error near '@p1' ,而第二个结果为零陈述。

尝试1:

string sql = "SELECT * " +
    "FROM OrderHeader " +
    "WHERE FacilityId = @p0 AND CONTAINS(*,\"@p1*\")";

var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();

exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,"@p1*")',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'

尝试2:

string sql = "SELECT * " +
    "FROM OrderHeader " +
    "WHERE FacilityId = @p0 AND CONTAINS(*,'\"@p1*\"')";

var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();

exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,''"@p1*"'')',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'

尝试3:

string sql = "SELECT * " +
    "FROM OrderHeader " +
    "WHERE FacilityId = @p0 AND CONTAINS(*,\'\"@p1*\"\')";

var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();

exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,''"@p1*"'')',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'

尝试这个:

string sql = "SELECT * " +
    "FROM OrderHeader " +
    "WHERE FacilityId = @p0 AND CONTAINS(*,'\"' + @p1 + '*\"')";

其他尝试的问题是@p1变量在sp_executesql上下文中作为较大的"@p1*"字符串文字的一部分进行了评估。 它不是查询中的元素,只是字符串文字的一部分。 我们可以将@p1变量与完整的"@p1*"值分开,将其分成三部分:前导引号的文字,仅@p1 ,尾随通配符和引号的文字。 它应该给您等效的执行以下查询的条件:

SELECT * FROM OrderHeader WHERE FacilityId = 9 AND CONTAINS(*,'"' + 'Rich' + '*"')

失败(尽管它确实应该工作),您还可以在将值分配给参数时尝试对其进行调整:

string sql = "SELECT * " +
    "FROM OrderHeader " +
    "WHERE FacilityId = @p0 AND CONTAINS(*, @p1)";

...SqlQuery(sql, intFacilityId, "\"" + strSearchTerm + "*\"").AsQueryable();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM