2016-03-22 2 views
1

Рассмотрим этот простой запрос, использование полнотекстового поиска на 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 
} 

Я могу только предположить, что щеголеватый является дезинфицирующим строку так или иначе, удалить кавычки возможно?

Любые идеи?

+1

Щеголеватых не дезинфицировать * ничего * - он использует параметры. Все, что работает в TSQL с использованием переменной *, должно также работать как параметр. Единственное заметное различие заключается в том, что dapper по умолчанию использует unicode ('nvarchar'). Кроме того, если 'searchTerm' был (в терминах C#), строка' 'нарисовала' ', это было бы * идентично * вашему TSQL вверху и должно работать нормально. В терминах TSQL ваш верхний запрос работает с 'DECLARE @searchTerm NVARCHAR (500) = N'painted''? Примечание: если * термин *, который вы используете после, «раскрашен», то в терминах C#, которые просто «раскрашены *», а не '' \ "окрашены * \" "' –

+0

@marpsmith - я сталкиваюсь с То же самое, вы нашли шаблон? потому что я делаю 'where contains (@ name, 'campb')' it * не возвращает ничего как на sql, так и на dapper *, который является * согласованным *, но когда я делаю 'where contains (@name, '" campb "')' * на sql возвращает строки, но ничего на dapper * - любой вход? – Jaya

ответ

1

Это работает для меня. Однако стек технологий трудятся на это .net core RTM и "Dapper": "1.50.0-rc3",

_dbConnection.QueryAsync<Guid>(@"select br.Id from Brand br where CONTAINS(br.Text,@Name)",new {Name = $"\"*{name}*\""}))