我使用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了解代码吗?
答案 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
中的属性)。