我尝试搜索,但没有找到我的问题的明确答案。我正在从 SQL Server 切换到 Oracle,但前端仍然使用 C#。我正在使用 ODP.Net。我在 Oracle 中有一个这样的存储过程:
Create or Replace
Procedure GetFoo
(cur_z OUT sys_refcursor,
pub_date IN varchar2,
fname IN varchar2 default null,
lname IN varchar2 default null,
phone IN varchar2 default null
)
IS
BEGIN
---get some data
END;
fname、lname 和 phone 是可选参数。在我的 C# 代码中,我设置了 OracleCommand.BindByName = true 我读过的应该允许我排除发送任何没有值要发送的参数。例如,我只需要发送光标 pub_date和电话以搜索仅与电话号码匹配的记录。但是,当从 C# 调用它并且只添加游标、pub_date 和电话的参数时,我不断收到错误消息:“调用‘GetFoo’时参数的数量或类型错误。然后如果我发送游标、pub_date 和fname 并将其余部分留空我得到结果并且一切正常。似乎无论 BindByName 设置如何,您都不能跳过任何参数。如果这是正确的行为,那么我可以解决它,但它看起来有点奇怪(很好至少从我的 SQL Server 经验来看)并且我想确保我没有遗漏任何东西。
谢谢。
据我所知,BindByName
旨在用于对比位置绑定(bind)...它与任何默认参数或类似参数无关...
我是一名优秀的程序员,十分优秀!