将列名作为参数传递时SQLite.net中的语法错误

时间:2010-04-15 15:34:38

标签: c# sql database sqlite

我正在尝试通过SQLite.net重命名我的数据库中的字段,并且出现语法错误。 我测试过的SQL是:

UPDATE candy SET name="Godiva" WHERE name="Sees";

并且工作正常。我正在使用带有CommandText的SQLiteCommand:

UPDATE candy SET @field_name=@new_name WHERE @field_name=@old_name;

我设置值的代码片段如下所示:

Connection.Open();
transaction = Connection.BeginTransaction();
UpdatePropertyQuery.Parameters.AddWithValue( "@field_name", "name");
UpdatePropertyQuery.Parameters.AddWithValue( "@old_name", "Sees");
UpdatePropertyQuery.Parameters.AddWithValue( "@new_name", "Godiva");
UpdatePropertyQuery.ExecuteNonQuery();
transaction.Commit();
Connection.Close();

我不是数据库专家,所以从新手的角度来看,这似乎应该可以工作,但也许这是一般的SQL,我不理解。这样做的正确方法是什么,任何人都可以解释为什么这种方法不起作用?

1 个答案:

答案 0 :(得分:2)

通常只有当您使用与基础查询中的实际形式参数相关的参数时才能执行这样的语句,即:

UPDATE candy SET name=@new_name WHERE name=@old_name;

这个想法是必须在语句中隐式声明所有数据库对象,如表和字段名,以便底层数据库访问库可以执行“是为正确类型的candy.name赋值的值”的检查”

在您的示例中,事先不知道字段名称,因此无法进行这些类型的检查。

更多信息here

如果字段名称是可变的,您只需构建一个包含SQL的字符串并直接执行它,或者调整您在命令文本中包含字段名称所需的内容。