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

时间:2016-12-20 15:26:38

标签: c# database parameters dbcommand

我使用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参数正确传递给存储过程参数。

  • 为什么?

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

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

  • 这个名字只是为了帮助dev了解代码吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

我也未在dbCommand中找到任何设置BindByName的属性(OracleCommand中的属性)。