Установка значения DEFAULT с помощью SQLiteParameter - PullRequest
0 голосов
/ 19 сентября 2018

В моем запросе предполагается добавить дополнительный столбец «_DisableAccounting» в таблицу «Settings_Global», указав значение DEFAULT с помощью SQLiteParemeter.

ALTER TABLE Settings_Global ADD COLUMN `_DisableAccounting` BOOL  NOT NULL  DEFAULT @defaultValue;

Когда SQLiteCommand выполняется, @defaultValue следует заменитьпо предоставленному параметру.

// ....
SQLiteParameter defaultValueParam = null;

if (defaultValue != null) {
    query += " DEFAULT @defaultValue`";
    defaultValueParam = new SQLiteParameter { ParameterName = "@defaultValue", Value = defaultValue };
}

query += ";";

using (SQLiteCommand cmd = _Connection.CreateCommand()) {
    cmd.CommandText = query;

    if (defaultValueParam != null) {
        cmd.Parameters.Add(defaultValueParam);
    }

    cmd.ExecuteNonQuery();
}

// ....

Тем не менее, я получаю сообщение об ошибке «Ошибка логики SQL или отсутствует база данных рядом с @defaultValue»: синтаксическая ошибка ». Поэтому кажется, что команда никогда не заменяет @defaultValue нафактическое значение.

Почему это не работает? Я делаю по сути то же самое с MySQL (мое приложение может дополнительно использовать MySQL), и он работает.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

При выполнении ALTER TABLE SQLite никак не изменяет определение столбца, а просто вставляет его непосредственно в конец оператора CREATE TABLE.Это означает, что маркер параметра окажется в этом операторе CREATE TABLE, что приведет к тому, что значение параметра станет недоступным, когда оператор будет интерпретирован позже.

Необходимо вставить значение по умолчанию непосредственно в команду SQL.

0 голосов
/ 19 сентября 2018

У вас, кажется, есть ложный серьезный акцент.То есть @defaultValue сопровождается серьезным акцентом, когда его, скорее всего, не должно быть.

Попробуйте изменить

ALTER TABLE Settings_Global ADD COLUMN `_DisableAccounting` BOOL  NOT NULL  DEFAULT @defaultValue`;

на

ALTER TABLE Settings_Global ADD COLUMN `_DisableAccounting` BOOL  NOT NULL  DEFAULT @defaultValue;

или

ALTER TABLE Settings_Global ADD COLUMN `_DisableAccounting` BOOL  NOT NULL  DEFAULT `@defaultValue`;
...