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

标签 c# .net oracle stored-procedures odp.net

我尝试搜索,但没有找到我的问题的明确答案。我正在从 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/

相关文章:

c# - 可以在 C# 中获取别名类型的类型吗?

c# - 无法从 Docker 中的 ASP.NET Core 3.1 连接到本地 SQL Server

c# - InternalsVisibleTo 不适用于所有程序集。有些有效,有些无效

c# - List.Select() 方法不执行 Func<> 内的方法

c# - BMP 中的字节到位得到 RGB

C# 2010,ODP.net,调用存储过程传递数组

c# - Parallel.ForEach 中的多个异步等待链接

c# - C# 的设计模式和基于字符串参数调用不同的方法

oracle - 如何从 PL/SQL 过程执行 'describe table_name' 命令?

php - fatal error : Call to undefined function oci_connect()