我需要在表中添加列,现在我有了这段代码:
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":语法错误
我真的无法弄清楚这个查询有什么问题?
答案 0 :(得分:3)
它不起作用的原因是SQLite的ALTER TABLE语句的语法在这里需要一个列名而不是一个任意字符串类型expr。这意味着你不能使用bind-parameter。
(显然,预准备语句的实现要求在“编译”时知道表名和列名,因此它不能是变量。)
如果需要在运行时动态选择列名的C#函数,则需要使用硬编码列名动态创建SQL语句。 (使用双引号来防止SQL注入攻击。)
string sql = "Alter Table table_name ADD "\"" + ColumnName.Replace("\"", "\"\"") + "\"";