dbCommand 和存储过程参数名称不同但值已传递。为什么?

dbCommand and stored procedure parameters name different but value is passed. Why?

我使用 C# 并实例化一个 DbCommand 以执行 Oracle 存储过程。

我的问题是:为什么过程通过与 db 中的 on 不同的命名参数接收值?

当我向 dbCommand 添加参数时:

...
string value = "Whatever"

db.AddInParameter(dbCommand,"WrongParamName",DbType.String);
db.SetParameterValue(dbCommand, "WrongParamName", value); 

我执行:

dataSet = db.ExecuteDataSet(dbCommand);

它将dbCommand参数正确传递给存储过程参数。

经过进一步调查,dbCommand 似乎按顺序 传递参数,而不是按名称传递参数,因为这是 dbCommand 的行为方式。

我没有找到这个名字的用途,除了它只是帮助开发人员知道哪个参数是哪个。

我也没有在 dbCommand 中找到任何 属性 来设置 BindByNameOracleCommand 中的 属性)。

我想知道你执行的是"EXEC sp_StoredProcedure @Param1 = @Param1, @Param2 = @Param2"还是"EXEC sp_StoredProcedure @Param1, @Param2"这样的存储过程。在第一种情况下,如果您更改 sp 中参数的顺序,调用不会受到影响。另一方面,在第二种情况下,它确实如此,因为命令中的第一个参数满足 sp 中的第一个参数,第二个参数满足第二个参数,依此类推。 如果您无法获得参数名称列表,您至少可以要求其他开发人员不要更改顺序并仅将参数添加到存储过程中参数列表的末尾。 如果你也不能做到这一点,那么你就没有别的事可做,那就祈祷不要改变它们。不过,对于某些脚本,您可以确定参数列表(参见 How to get stored procedure parameters details?)。您可以像普通的 select 语句一样执行此命令。