【发布时间】:2017-12-21 03:00:24
【问题描述】:
我正在尝试创建一个参数化的 sql 字符串,当在数据库服务器上执行时,我希望以这种方式结束,执行时返回所需的结果:
SELECT * FROM OrderHeader WHERE FacilityId = 9 AND CONTAINS(*,'"Rich*"')
我已经尝试了下面的三个尝试和结果,但不能让它像上面的目标语句一样出现,结果要么是第一个语句中的 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'
【问题讨论】:
-
我认为您需要从查询中完全删除 * 并将此 * 附加到您的参数中,请让我知道它是否可以作为答案发布
-
@msoliman 我是否可以假设您是在您删除答案时否决了我的问题的人?如果是这样,不酷。 Joel 首先让我找到了一个可行的解决方案,因此他的回答被接受了。虽然我认为你在正确的轨道上,你只是有点太晚了。
-
我刚刚删除了我的答案,因为您验证了另一个答案是正确的并且与您合作得很好,所以我为什么还要保留我的答案,就是这样
-
@msoliman 明白,只是想知道为什么有人投反对票但没有解释原因。我一直在寻求改进我在 SO 上的问题,所以如果它有问题,我希望如果有人觉得足以反对它,他们会分享他们的原因,以便我可以改进。
标签: c# sql-server string entity-framework