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