问题 使用Dapper的SQL语句中的参数化LIKE子句


我想使用Dapper执行以下查询,Dapper当前不返回预期结果(我认为它必须将@pName参数视为单引号中的文字文本?):

var q = "SELECT * FROM Users WHERE Name LIKE '@pName%'";

@pName是我在执行查询时为其分配值的参数。

如果我只是构建SQL,事情就会起作用:

var q = "SELECT * FROM Users WHERE Name LIKE '" + name + "%'";

..但如果可能,我宁愿使用参数。

我正在使用以下代码执行查询:

o = _cn.Query<User>(q, new { pName = new DbString { Value = name, IsFixedLength = false, Length = 25, IsAnsi = true } }).ToList();

我如何使用Dapper解决这个问题?


10851
2017-09-22 08:52


起源

确保你记得逃避你的喜欢条款(见答案评论) - Sam Saffron


答案:


SELECT * FROM Users WHERE Name LIKE @pName + '%'

15
2017-09-22 08:55



确保你逃避你的喜欢条款: stackoverflow.com/questions/439495/tsql-like-escape-clause - Sam Saffron
@Sam:好点。 - Marcelo Cantos
谢谢山姆。我不熟悉这个,所以会添加它。 - marcusstarnes
我知道它已经过时了,但这样逃避的重点是什么? - Carlos Rodriguez
如果我知道,就会被吓坏其他人这样做是为了编辑。我把它翻了回来。 - Marcelo Cantos