代码之家  ›  专栏  ›  技术社区  ›  Zirbo Filip

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

  •  0
  • Zirbo Filip  · 技术社区  · 8 年前

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

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

    当我将参数添加到 dbCommand :

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

    我执行:

    dataSet = db.ExecuteDataSet(dbCommand);
    

    它将通过 数据库命令 参数正确设置为存储过程参数。

    • 为什么?

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

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

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    8 年前

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

        2
  •  0
  •   Zirbo Filip    8 年前

    经过进一步调查,似乎 dbCommand按顺序传递参数 ,而不是名字,因为这是 dbCommand 应该表现得很好。

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

    我也没有发现任何财产 数据库命令 设置 BindByName (a)在 OracleCommand ).