【发布时间】:2011-11-13 04:59:43
【问题描述】:
我尝试搜索并没有找到我的问题的明确答案。我正在从 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 经验来看),我想确保我没有遗漏任何东西。
谢谢。
【问题讨论】:
-
只是想知道您是否尝试过跳过一些参数并在 OracleCommand.BindByName 后面添加注释来执行 sp?
标签: c# .net oracle stored-procedures odp.net