我正在尝试使用 C# 中的 oledb 命令函数运行 db2 sql 语句。实际上我正在以相同的方式运行另一个 sql 查询,但在执行此查询时出现以下错误。
[DB2] SQL0104N 意外标记“?”发现在“”之后。预期的代币可能包括:
。 SQLSTATE=42601
string sql = @"EXPLAIN PLAN SET QUERYNO =? FOR ? commit;"
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
cmd.Parameters.AddWithValue("@queryNo", queryNo);
cmd.Parameters.AddWithValue("@query", query);
var result = cmd.ExecuteNonQuery();
}
如果我将它与字符串连接一起使用,它可以正确运行,但字符串连接可能会导致 SQL 注入问题。所以我需要使用参数化查询。我该如何解决它?
string sqlPattern = "EXPLAIN PLAN SET QUERYNO ={0} FOR {1}commit;";
string sql = string.Format(sqlPattern, queryNo, query);
在您的情况下,您正在尝试设置命名参数。如果您使用
OleDbCommand
,则必须依次向cmd.Parameters
添加参数。
而不是
cmd.Parameters.AddWithValue("@queryNo", queryNo);
cmd.Parameters.AddWithValue("@query", query);
尝试一下,
cmd.Parameters.Add(queryNo);
cmd.Parameters.Add(query);
了解更多详情:阅读