【发布时间】:2020-04-25 10:59:55
【问题描述】:
这是我的代码。
public void setUpdate(List<string> code, string tableName)
{
SQLiteConnection con = new SQLiteConnection(connection);
SQLiteCommand UPDATE = new SQLiteCommand("UPDATE @TableName SET @ColumnName = @Value WHERE Key = @PK", con);
UPDATE.Parameters.AddWithValue("@TableName", "TEST");
UPDATE.Parameters.AddWithValue("@ColumnName", code[1]);
UPDATE.Parameters.AddWithValue("@Value", code[2]);
UPDATE.Parameters.AddWithValue("@PK", code[0]);
using (con)
{
con.Open();
UPDATE.ExecuteNonQuery();
}
}
我遇到了这个异常
System.Data.SQLite.SQLiteException: 'SQL logic error
near "@TableName": syntax error'
我已经尝试过使用
UPDATE.Parameters.Add(new SQLiteParameter("@TableName", DbType.String) .Value = tableName);
仍然遇到同样的异常。
我不知道如何解决这个问题了。 我不想使用串联,因为当您传递如下值时,它会搞砸查询。
Smith's
编辑:
我在
上放了一个断点using (con)
然后检查命令文本。结果是:
"UPDATE @TableName SET @ColumnName = @Value WHERE Key = @PK"
【问题讨论】:
-
据我所知,您无法通过提供表和列来尝试参数化。您必须将这些部分构建为命令的直接部分。您显然可以添加设置值和位置的参数。如果通过将字符串部分添加在一起来构建查询,请注意 SQL 注入。
-
我已经试过了。它给了我同样的错误,但在@value 上。
-
我认为您不能在命令对象中参数化表名或列名。
-
我尝试硬编码表名和列名仍然相同的错误:( .