0

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

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

当我将参数添加到dbCommand

...
string value = "Whatever"

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

我执行:

dataSet = db.ExecuteDataSet(dbCommand);

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

  • 这是为什么?

  • 它将值设置为没有值的第一个参数还是基于位置?

  • 如果它基于位置,为什么我们需要名称?

  • 名称只是为了帮助开发人员理解代码吗?

4

2 回答 2

1

我需要知道您是否执行像“EXEC sp_StoredProcedure @Param1 = @Param1, @Param2 = @Param2”或“EXEC sp_StoredProcedure @Param1, @Param2”这样的存储过程。第一种情况,如果改变sp中参数的顺序,调用不会受到影响。另一方面,在第二种情况下,它确实如此,因为命令中的第一个参数满足 sp 中的第一个参数,第二个到第二个等等。如果您无法获得参数名称列表,您至少可以要求其他开发人员不要更改顺序并仅将参数添加到存储过程中参数列表的末尾。如果你也不能做到这一点,那么你就别无他法了,那就祈祷不要改变它们。通过一些脚本,)。您可以像执行普通的 select 语句一样执行此命令。

于 2016-12-22T07:59:58.627 回答
0

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

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

我也没有找到dbCommand要设置的任何属性BindByName(中的属性OracleCommand)。

于 2016-12-22T07:27:10.653 回答