这个sqllite alter table查询有什么问题?

时间:2016-10-04 22:46:35

标签: c# sql .net sqlite

我需要在表中添加列,现在我有了这段代码:

public void InsertParameter(string ColumnName)
{
    string sql = "ALTER TABLE table_name ADD :value1";

    SQLiteCommand cmd = new SQLiteCommand(sql,conn);

    cmd.Parameters.AddWithValue("value1", ColumnName);

    cmd.ExecuteNonQuery();
}

但是这给了我语法错误:

  

near":value1":语法错误

我真的无法弄清楚这个查询有什么问题?

1 个答案:

答案 0 :(得分:3)

它不起作用的原因是SQLite的ALTER TABLE语句的语法在这里需要一个列名而不是一个任意字符串类型expr。这意味着你不能使用bind-parameter。

(显然,预准备语句的实现要求在“编译”时知道表名和列名,因此它不能是变量。)

如果需要在运行时动态选择列名的C#函数,则需要使用硬编码列名动态创建SQL语句。 (使用双引号来防止SQL注入攻击。)

string sql = "Alter Table table_name ADD "\"" + ColumnName.Replace("\"", "\"\"") + "\"";