我刚刚遇到了这个令人不安的错误。我尝试在 c# 中使用 ODP.NET 执行一个简单的 sql 查询。我按名称传递参数(设置命令的 BindByName=true) 查询使用一个名为“tid”的参数。当我仅将此参数添加到命令的参数集合中时,一切正常。如果我添加另一个未在查询中使用的参数,则查询会崩溃并显示此错误消息
ORA-01036: illegal variable name/number
代码看起来像这样
using( var conn = new OracleConnection([some connection string]) )
{
conn.Open();
using( var comm = conn.CreateCommand() )
{
// using only the :tid parameter.
comm.CommandText = "SELECT column FROM Table T WHERE T.Id = :tid";
comm.CommandType = CommandType.Text;
comm.BindByName = true;
comm.Parameters.Add("tid", 500000207);
// This extra parameter causes an exception when the query is executed.
// If I remove it everything runs smoothly
comm.Parameters.Add("param2", "ValueOfSecondParam");
comm.ExecuteNonQuery();
}
}
如何传递比查询中实际使用的参数更多的参数,而不会出现异常?(假设我动态创建查询,但我不控制要传递的参数,所以我必须首先传递所有参数)