C# OraOLEDB 存储过程输出参数

Posted

技术标签:

【中文标题】C# OraOLEDB 存储过程输出参数【英文标题】:C# OraOLEDB Stored Procedure OUT Parameter 【发布时间】:2015-04-28 10:19:36 【问题描述】:

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

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

DataTable dt is null 在调用reader.GetSchemaTable() 的那部分之后。

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

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

请给我一些建议。

Oracle 11g,Windows 7 64 位 Link1 Link2

              try
              
                  string connStr = "Provider=OraOLEDB.Oracle.1;User ID=scott;Password=tiger;Data Source=//localhost:1521/orcl;OLEDB.NET=1;PLSQLRSet=1;";
                  conn = new OleDbConnection(connStr);
                  conn.Open();

                  OleDbCommand cmd = new OleDbCommand();
                  cmd.Connection = conn;

                  OleDbParameter param = cmd.CreateParameter();
                  param.ParameterName = "O_ENAME";
                  param.Direction = ParameterDirection.Output;
                  param.OleDbType = OleDbType.Char;
                  param.Size = 15;

                  cmd.Parameters.Clear();
                  cmd.Parameters.Add(param);

                  cmd.CommandType = CommandType.Text;
                  cmd.CommandText = "CALL SCOTT.EMPINFO(?)";

                  OleDbDataReader reader = cmd.ExecuteReader();             
                  DataTable dt = reader.GetSchemaTable();   
              

存储过程EMPINFO

CREATE OR REPLACE PROCEDURE
EMPINFO(O_ENAME OUT VARCHAR2)
IS
BEGIN
SELECT ENAME
INTO O_ENAME
FROM EMP
WHERE EMPNO=7369;
END;
/

【问题讨论】:

我不熟悉 Oracle,但对于 SQL 服务器,我会使用 ExecuteNonQuery(),然后从 param.Value 读取值。也许这在这种情况下也有效。 非常感谢德克!!你是对的!! :D 【参考方案1】:

cmd.ExecuteReader() 仅在您返回 RefCursor 时使用。

对于标量返回值,您必须使用:

cmd.ExecuteNonQuery();
string emp = param["O_ENAME"].Value;

也许这个也可以:

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

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

【讨论】:

如果您很高兴,请将问题标记为已回答。

以上是关于C# OraOLEDB 存储过程输出参数的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用存储过程输出参数

使用 C# 代码处理 Oracle 存储过程的输出参数

C#获取存储过程返回值和输出参数值的方法

C#获取存储过程的 Return返回值和Output输出参数值

c#调用Mysql带参数的存储过程

c#中两种不同的存储过程调用与比较