c#从oracle函数中返回参数

Posted

技术标签:

【中文标题】c#从oracle函数中返回参数【英文标题】:c# return out parameters from oracle function 【发布时间】:2016-04-29 00:42:11 【问题描述】:

我有textbox,在休假事件中,我正在使用 oracle 函数检索其他textboxs 的数据,所以我编写了以下代码,但没有找到数据

    private void TB_PRODUCT_DESC_Leave(object sender, EventArgs e)
    
        string connstr = "Data Source=JDT; User Id=admin; password=admin;";

        string cmdtxt = @"F_GET_PRODUCT_INFO";   //~ Returning CUSTOMER_ID from trigger in database ~//

        using (OracleConnection conn = new OracleConnection(connstr))
        using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
        
            try
            
                cmd.CommandText = cmdtxt;
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new OracleParameter("TB_PRODUCT_DESC", TB_PRODUCT_DESC.Text));
                cmd.Parameters.Add(":V_PRODUCT_DESC", OracleDbType.Varchar2, ParameterDirection.ReturnValue);

                conn.Open();

                cmd.ExecuteReader();

                TB_NOTES.Text = (cmd.Parameters[":V_PRODUCT_DESC"].Value).ToString();

                MessageBox.Show(TB_NOTES.Text);
            
            catch (Exception EX)
             MessageBox.Show(EX.Message, "error msg", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        

我在下面使用的函数返回一个 varchar2 值

CREATE OR REPLACE FUNCTION F_GET_PRODUCT_INFO (P_PRODUCT_ID NUMBER)
  RETURN VARCHAR2
IS
   V_PRODUCT_DESC           VARCHAR2 (200);
   V_UNIT_PRICE                 NUMBER;
   V_MEASUREMENT_UNIT     VARCHAR2(32);
BEGIN
   SELECT PRODUCT_DESC,
                UNIT_PRICE,
                MEASUREMENT_UNIT
     INTO V_PRODUCT_DESC,
               V_UNIT_PRICE,
               V_MEASUREMENT_UNIT
     FROM WAREHOUSE
    WHERE PRODUCT_ID = P_PRODUCT_ID;

   RETURN V_PRODUCT_DESC;
END F_GET_PRODUCT_INFO;

【问题讨论】:

可能重复的 SO 问题:***.com/questions/23199713/… @rontornambe 我有两个正确的错误'ParameterDirection'应该是返回值,'cmd.Parameters.Add'应该在执行之前但现在我没有找到数据错误 【参考方案1】:

您需要指定 varchar2 的大小:

OracelParameter prm = new OracleParameter(":V_PRODUCT_DESC");
            prm.Direction = ParameterDirection.ReturnValue;
            prm.DbType = OracleDbType.Varchar2;
            prm.Size = 200;
            cmd.Parameters.Add(prm);

【讨论】:

以上是关于c#从oracle函数中返回参数的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++ 从 C# 中为返回自定义结构的函数获取错误的参数值

调用返回游标的 oracle 函数

使用 JDBC 从存储过程中获取 Oracle 表类型

Oracle 根据传入日期参数 返回年龄 函数......

带有参数的 PL/SQL 过程/函数从选择查询返回表

oracle面试题