Рассмотрим этот простой запрос, использование полнотекстового поиска на Keywords
поле:Передача параметров полнотекстового поиска с помощью Dapper.net
DECLARE @searchTerm VARCHAR(500) = 'painted'
SELECT * FROM StockCatalogueItems
WHERE (CONTAINS(KeyWords, @searchTerm))
Это работает, как ожидалось, но мне нужно сделать то же самое, используя щеголеватый .net параметризованный запрос. При использовании хранимых процедур я создаю полный текстовый параметр следующим образом: "\"painted*\""
Но, используя тот же подход, это не работает с использованием dapper. Результаты не возвращаются. Это строка в запросе, в котором я использую параметр:
AND (CONTAINS(KeyWords, @search))
и это передается запрос следующим образом:
return _context.Database.Connection.Query<StockProfileMatrix>(basequery, new
{
search = searchTerm
}
Я могу только предположить, что щеголеватый является дезинфицирующим строку так или иначе, удалить кавычки возможно?
Любые идеи?
Щеголеватых не дезинфицировать * ничего * - он использует параметры. Все, что работает в TSQL с использованием переменной *, должно также работать как параметр. Единственное заметное различие заключается в том, что dapper по умолчанию использует unicode ('nvarchar'). Кроме того, если 'searchTerm' был (в терминах C#), строка' 'нарисовала' ', это было бы * идентично * вашему TSQL вверху и должно работать нормально. В терминах TSQL ваш верхний запрос работает с 'DECLARE @searchTerm NVARCHAR (500) = N'painted''? Примечание: если * термин *, который вы используете после, «раскрашен», то в терминах C#, которые просто «раскрашены *», а не '' \ "окрашены * \" "' –
@marpsmith - я сталкиваюсь с То же самое, вы нашли шаблон? потому что я делаю 'where contains (@ name, 'campb')' it * не возвращает ничего как на sql, так и на dapper *, который является * согласованным *, но когда я делаю 'where contains (@name, '" campb "')' * на sql возвращает строки, но ничего на dapper * - любой вход? – Jaya