使用SQLiteParameter设置DEFAULT值

时间:2018-09-19 09:20:04

标签: c# sqlite system.data.sqlite

我的查询应该在“ Settings_Global”表中添加一个附加列“ _DisableAccounting”,并使用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 :(得分:1)

您似乎带有虚假的重音。这是@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`;

答案 1 :(得分:1)

在执行ALTER TABLE时,SQLite不会以任何方式修改列定义,而只是将其直接插入CREATE TABLE语句的末尾。 这意味着参数标记将以该CREATE TABLE语句结尾,这将导致以后解释该语句时参数值不可用。

您必须将默认值直接插入SQL命令中。