C#OraOLEDB存储过程输出参数

C#OraOLEDB存储过程输出参数,c#,oracle,stored-procedures,oledb,C#,Oracle,Stored Procedures,Oledb,我试图通过C中的OraOLEDB提供程序调用这样一个简单的存储过程# 该过程只有一个OUT参数。这不管用 DataTabledt在调用reader.GetSchemaTable()的部分之后为null 有趣的是,如果我将REF CURSOR TYPE作为其他存储过程的输出参数,我可以使它工作。这个过程没有问题。它可以在sqlplus中调用。我已经读到我不需要(实际上不能)手动绑定REF CURSOR TYPE 问题是如何通过C#中的OraOLEDB调用具有非游标类型输出参数的存储过程 请给我一些

我试图通过C中的OraOLEDB提供程序调用这样一个简单的存储过程#

该过程只有一个OUT参数。这不管用

DataTabledt在调用
reader.GetSchemaTable()
的部分之后为null

有趣的是,如果我将REF CURSOR TYPE作为其他存储过程的输出参数,我可以使它工作。这个过程没有问题。它可以在sqlplus中调用。我已经读到我不需要(实际上不能)手动绑定
REF CURSOR TYPE

问题是如何通过C#中的OraOLEDB调用具有非游标类型输出参数的存储过程

请给我一些建议

Oracle 11g、Windows 7 64位

存储过程
EMPINFO

CREATE OR REPLACE PROCEDURE
EMPINFO(O_ENAME OUT VARCHAR2)
IS
BEGIN
SELECT ENAME
INTO O_ENAME
FROM EMP
WHERE EMPNO=7369;
END;
/
cmd.ExecuteReader()
仅在返回RefCursor时使用

对于标量返回值,必须使用以下内容:

cmd.ExecuteNonQuery();
string emp = param["O_ENAME"].Value;
也许这一条也适用:

string emp = cmd.ExecuteScalar().ToString();

除非手动添加值,否则无法对DataTable使用标量值。

我不熟悉Oracle,但对于SQL server,我会使用
ExecuteNonQuery()
,然后从
param.value
读取值。也许这在这种情况下也适用。非常感谢德克!!你是对的如果你很高兴,就把问题标为已回答。
string emp = cmd.ExecuteScalar().ToString();