У меня есть список ключевых слов, которые я храню в списке.Параметрированный динамический SQL-запрос
Для выборки записей из таблицы, я использую следующий запрос:
sqlBuilder.Append("SELECT name, memberid FROM members WHERE");
StringBuilder sqlBuilder = new StringBuilder();
foreach (string item in keywords)
{
sqlBuilder.AppendFormat(" LOWER(Name) LIKE '%{0}%' AND", item);
}
string sql = sqlBuilder.ToString();
Как вы могли заметить, мой запрос уязвим к SQL-инъекции, таким образом, я хочу использовать параметры с помощью SqlCommand(). Я попытался следующие, но по-прежнему не работает:
foreach (string item in keywords)
{
sqlBuilder.AppendFormat(" LOWER(Name) LIKE '%' + @searchitem + '%' AND", item);
SqlCommand cmd = new SqlCommand(sqlBuilder.ToString());
cmd.Parameters.AddWithValue("@searchitem",item);
}
Где я мог бы сделать ошибку, или, вернее, как я должен есть по этому поводу?
Потому что каждый раз, когда вы перебирать свой 'keywords', вы создать новый' SqlCommand'. Я думаю, вы должны использовать 'AppendFormat' в своем цикле' foreach', затем создать 'SqlCommand' и добавить свои параметры вне вашего цикла foreach. –
Я предлагаю распечатать cmd.CommandText, вы увидите, что это не хорошо сформированный SQL-запрос (вы все делаете внутри своего цикла). Кроме того, подстановочный знак будет лучше сочетаться с значением параметра. –