Search code examples
c#asp.netoracle-databaseprocedure

Return output parameter from C#


I have a procedure with 2 input parameters and 2 output parameters. Currently its working fine. However, i want to take the two output parameters of the procedure and store it in a variable. Can anyone guide me how.

Stored procedure code:

create or replace PROCEDURE P_LOGIN_USER
(
    USERNAME IN VARCHAR2 
   , ENCRYPTIONKEY IN VARCHAR2 
   , OUT_STATUS OUT VARCHAR2 
   , OUT_STATUS_DESC OUT VARCHAR2
) 

------------------------Procedure Code
END P_LOGIN_USER

C# Code where i assign the input parameters. Missing part is getting the output parameters

OracleCommand cmd = new OracleCommand("P_LOGIN_USER", OrCon);
cmd.CommandType = CommandType.StoredProcedure;

OracleParameter in_username = new OracleParameter();
in_username.OracleDbType = OracleDbType.Varchar2;
in_username.Direction = ParameterDirection.Input;
in_username.Size = 500;
in_username.Value = username;
cmd.Parameters.Add(in_username);

OracleParameter in_ecnryptionkey = new OracleParameter();
in_ecnryptionkey.OracleDbType = OracleDbType.Varchar2;
in_ecnryptionkey.Direction = ParameterDirection.Input;
in_ecnryptionkey.Size = 500;
in_ecnryptionkey.Value = password;
cmd.Parameters.Add(in_ecnryptionkey);

OracleParameter out_1 = new OracleParameter();
out_1.OracleDbType = OracleDbType.Varchar2;
out_1.Direction = ParameterDirection.Output;
out_1.Size = 500;
cmd.Parameters.Add(out_1);

OracleParameter out_2 = new OracleParameter();
out_2.OracleDbType = OracleDbType.Varchar2;
out_2.Direction = ParameterDirection.Output;
out_2.Size = 500;
cmd.Parameters.Add(out_2);

try
{
OrCon.Open();
cmd.ExecuteNonQuery();

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "P_LOGIN_USER";
cmd.Parameters.Add(new OracleParameter
{
	ParameterName = "result",
	Size = 1,
	Direction = ParameterDirection.ReturnValue,
	OracleDbType = OracleDbType.Varchar2
});


}
catch (OracleException ex)
{
Console.Write(ex.Message);
}

OrCon.Close();


Solution

  • You can get the value out output parameter like this.

    string outputStatus = Convert.ToString(cmd.Parameters["@OUT_STATUS "].Value); 
    

    Put the above line after ExecuteNonQuery()