Распечатайте следующую букву, увеличив код ascii в c # [закрыто]

Вы делаете несколько вещей здесь неправильно:

  • Вы даете всем своим параметрам одно и то же имя @searchitem. Это не сработает. Параметры должны иметь уникальные имена.
  • Вы создаете новый SqlCommand для каждого элемента. Это не сработает. Создайте SqlCommand один раз в начале цикла, а затем установите CommandText, как только вы закончите создание SQL.
  • Ваш SQL заканчивается на AND, что недействительно синтаксис.

Предложения по улучшению (не так само по себе, но не лучшая практика):

  • Как предложил Фредерик, обычным способом является установка % в этом параметре, вместо того, чтобы выполнять конкатенацию строк внутри SQL.
  • Если вы явно не используете сортировку с учетом регистра для вашей базы данных, сравнение должно быть нечувствительным к регистру. Таким образом, вам может не понадобиться LOWER.

Пример кода:

SqlCommand cmd = new SqlCommand();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.Append("SELECT name, memberid FROM members ");

var i = 1;
foreach (string item in keywords)
{
    sqlBuilder.Append(i == 1 ? " WHERE " : " AND ");
    var paramName = "@searchitem" + i.ToString();
    sqlBuilder.AppendFormat(" Name LIKE {0} ", paramName); 
    cmd.Parameters.AddWithValue(paramName, "%" + item + "%");

    i++;
}
cmd.CommandText = sqlBuilder.ToString();
-8
задан Muhammad Hashim 9 October 2016 в 12:25
поделиться