Добавить элемент TEXT в SQLite с пробелом - PullRequest
0 голосов
/ 16 марта 2020

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

public void addThingToDb(int id, string user, string description)
        {
            cmd.CommandText = $"INSERT INTO Assets(id, user, description) VALUES({id}, {user}, {description})";
            cmd.ExecuteNonQuery();
        }

При запуске я получаю: SQL logi c ошибка рядом с "были": синтаксическая ошибка

если, например, description="I were";

я попытался также добавить одинарные и двойные кавычки (с помощью backsla sh), но я получить другую ошибку, потому что SQL считают, что слово после кавычки - это новый столбец (например, атака SQL Injection). Пожалуйста, помогите мне

1 Ответ

1 голос
/ 16 марта 2020

Используйте параметры, не вставляйте строки в другие строки при построении оператора sql. Например, что, по вашему мнению, произойдет, если одна из ваших строк содержит одну кавычку? И это наименее важная из ваших проблем. Sql Инъекция - большая проблема здесь.

public void addThingToDb(int id, string user, string description)
{
    cmd.CommandText = $"INSERT INTO Assets(id, user, description) VALUES(@id, @user, @description)";
    cmd.Parameters.Add("@int", DbType.Int32).Value = id;
    cmd.Parameters.Add("@user", DbType.String).Value = user;
    cmd.Parameters.Add("@description", DbType.String).Value = description;
    cmd.ExecuteNonQuery();
}

Чтобы объяснить вашу реальную проблему вместо этого. Строковое значение должно быть заключено в одинарные кавычки, чтобы быть распознанным как таковое. Фактический код не выполняется, потому что пробел нарушает синтаксис вашего строкового запроса. Снова используйте параметры, и эта проблема исчезнет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...