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

Posted

技术标签:

【中文标题】使用 C# 代码处理 Oracle 存储过程的输出参数【英文标题】:Handle output parameter of an Oracle stored procedure using C# code 【发布时间】:2021-08-28 15:50:18 【问题描述】:

我正在使用 Oracle 数据库。我有一个名为Room 的表,然后我创建了这个存储过程:

 CREATE OR REPLACE PROCEDURE RETRIEVEROOM
 (RoomID IN INTEGER, RID_Out OUT INTEGER) 
 AS
 BEGIN
    Select Room.RoomNumber INTO RID_Out 
    From Room 
    Where Room.RoomNumber = RoomID;
 END;

所以我尝试使用 C# 和以下代码发送输入和输出参数:

private void loadRooms()

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "RETRIEVEROOM";
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("RoomID", 218);  // Here I send the input parameter
            cmd.Parameters.Add("RID_Out", "").Direction = ParameterDirection.Output; 
            cmd.Parameters["RID_Out"].Size = 255; 
            cmd.ExecuteNonQuery();
            MessageBox.Show(cmd.Parameters["RID_Out"].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

当我尝试在 MessageBox 中打印 output parameter 的值时,它会打印“RID_Out”而不是 RID_Out 的值,它应该是 218我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

猜你想打印参数的Value属性。

MessageBox.Show((string)cmd.Parameters["RID_Out"].Value, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

【讨论】:

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

C#中使用Oracle存储过程返回结果集

.Net 调用 Oracle Array 绑定存储过程输出 VarChar2

使用 Oracle 存储过程中的 refcursor 值填充 C# 数据表

从 C# 执行 Oracle 存储过程 - 调用中的参数数量或类型错误

使用 C# 中的存储过程更新 Oracle 表 Odd bug

C#执行oracle返回游标类型的存储过程