DB2 SQL0104N 意外标记“?”发现以下“”

问题描述 投票:0回答:1

我正在尝试使用 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);
c# sql .net concatenation oledb
1个回答
0
投票

在您的情况下,您正在尝试设置命名参数。如果您使用

OleDbCommand
,则必须依次向
cmd.Parameters
添加参数。

而不是

cmd.Parameters.AddWithValue("@queryNo", queryNo);
cmd.Parameters.AddWithValue("@query", query);

尝试一下,

cmd.Parameters.Add(queryNo);
cmd.Parameters.Add(query);

了解更多详情:阅读

© www.soinside.com 2019 - 2024. All rights reserved.