gpt4 book ai didi

c# - ODP.NET 存储过程和可选参数

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:22 25 4
gpt4 key购买 nike

我尝试搜索,但没有找到我的问题的明确答案。我正在从 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)...它与任何默认参数或类似参数无关...

关于c# - ODP.NET 存储过程和可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com