Search code examples
c#asp.netoraclestored-procedures

Wrong number or types of arguments in call to GET_MANUAL_LOS_REQ_STATUS in Oracle while Data Binding


I am binding data via Stored procedure but I am getting error as

wrong number or types of arguments in call to 'GET_MANUAL_LOS_REQ_STATUS'\nORA-06550:

Here is the procedure

create or replace PROCEDURE GET_MANUAL_LOS_REQ_STATUS 
(
  P_CURR OUT SYS_REFCURSOR, 
  P_OUTSTATUS OUT VARCHAR2,
  P_MESSAGE OUT VARCHAR2
) AS 
T_CNT NUMBER :=0;
BEGIN
  OPEN P_CURR FOR
    SELECT LOS.A6_NEID, LOS.SOURCE, LOS.STATUS, LOS.REMARKS,
    LOS.MODIFIED_DATE, LOS.USERNAME, REQ.STATUS LOS_STATUS FROM LOS_REQUEST_MANUAL LOS,
    APP_3DPT.LOS_REQUEST_LOG REQ 
    WHERE LOS.A6_NEID = REQ.LOS_REQUEST_ID ORDER BY MODIFIED_DATE DESC;

  P_OUTSTATUS :='SUCCESS';
EXCEPTION WHEN OTHERS THEN
P_OUTSTATUS :='FAILED';
P_MESSAGE :=SQLERRM;
END GET_MANUAL_LOS_REQ_STATUS;

Also below is the code.

public DataTable Bind_Grid_Data()
        {
            OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionStringAirFiber"].ConnectionString);
            try
            {
                OracleCommand cmd = new OracleCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = ConfigurationManager.AppSettings["GET_MANUAL_LOS_REQ_STATUS"];
                cmd.Connection = conn;

                cmd.Parameters.Add(new OracleParameter
                {
                    ParameterName = "P_CURR",
                    OracleDbType = OracleDbType.RefCursor,
                    Size = 500,
                    Direction = ParameterDirection.Output
                });

                cmd.Parameters.Add(new OracleParameter
                {
                    ParameterName = "P_OUTSTATUS",
                    OracleDbType = OracleDbType.RefCursor,
                    Size = 500,
                    Direction = ParameterDirection.Output
                });

                cmd.Parameters.Add(new OracleParameter
                {
                    ParameterName = "P_MESSAGE",
                    OracleDbType = OracleDbType.RefCursor,
                    Size = 500,
                    Direction = ParameterDirection.Output
                });


                if (conn.State != ConnectionState.Open) conn.Open();

                OracleDataAdapter daIPColo = new OracleDataAdapter(cmd);
                DataTable dtIPColo = new DataTable();
                daIPColo.Fill(dtIPColo);
                return dtIPColo;
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                if (conn.State == ConnectionState.Open) conn.Close();
            }
        }


Solution

  • Probably a copy and paste error.

    Your parameters P_OUTSTATUS and P_MESSAGE are VARCHAR2, but you bind them as OracleDbType.RefCursor ...