【问题标题】:What is wrong with this sqllite alter table query?这个 sqlite alter table 查询有什么问题?
【发布时间】:2016-10-04 22:46:35
【问题描述】:

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

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();
}

但这给了我语法错误:

“:value1”附近:语法错误

我真的不知道这个查询有什么问题?

【问题讨论】:

标签: c# sql .net sqlite


【解决方案1】:

它不起作用的原因是 SQLite 的 ALTER TABLE 语句的语法在此处需要列名,而不是任意字符串类型的 expr。这意味着您不能对它使用绑定参数。

(显然,prepared statements 的实现需要在“编译”时知道表名和列名,所以它不能是变量。)

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

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

【讨论】:

  • 自从您从 cmets 发布您的答案后,我删除了我的答案 :-) 这更清楚并解释了该方法。感谢您提供有用的信息!
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 2017-02-02
  • 1970-01-01
  • 2011-09-29
  • 2011-10-13
相关资源
最近更新 更多