简体   繁体   中英

c# return out parameters from oracle function

I have textbox and on the leave event I am using oracle function to retrieve data for other textboxs so I made below code but i am getting no data found

    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); }
        }

function I am using below that return one varchar2 value

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;

You need to specify a size for the varchar2:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM