Передача параметра в .fromsql - PullRequest
       8

Передача параметра в .fromsql

0 голосов
/ 09 октября 2018

Я не могу решить эту проблему, и я расстраиваюсь.Я хочу выполнить базовый поиск человека в базе данных, и следующее работает нормально

 IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%" + searchfor + "%' or lastname like '%" + searchfor + "%'");

, но это плохо из-за возможных инъекций SQL.Поэтому я попробовал это (потому что я использовал его для вызова хранимой процедуры, и она работает нормально)

IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%{0]%' or lastname like '%{0}%'",searchfor);

, которая не работает.Я попробовал это с SqlParameter

SqlParameter para = new SqlParameter("search", searchfor);
IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like '%@search%' or lastname like '%@search%'",para);

, который тоже не работает.

Может кто-нибудь сказать, пожалуйста, что я делаю неправильно?Спасибо

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Ну, конечно, я понял это только через 10 минут после публикации вопроса.Это работает

DbParameter para = new SqlParameter("search", "%"+searchfor+"%");
IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql($"select * from vwSomeView where firstname like @search or lastname like @search",para);
0 голосов
/ 09 октября 2018

Используйте @search в качестве переменной в SQL (а не внутри строки), и она должна работать.

SqlParameter para = new SqlParameter("search", "%" + searchfor + "%");
IQueryable<VwSomeView> dbresult = db.vwSomeView.FromSql("select * from vwSomeView where firstname like @search or lastname like @search",para);
...