我的查询应该在“ 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),并且可以正常工作。
答案 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命令中。