I have a stored procedure which looks like this:
PROCEDURE semifinished_lable_data(p_piece_num_id IN INTEGER,
p_piece_id OUT STRING,
p_tickness OUT NUMBER)
IS begin
select p_piece_id,p_tickness into p_piece_id,p_tickness from piece p where p.piece_num_id=p_piece_num_id;
end;
I've executed it from the database and it worked perfectly. When I execute it from c# app I don't get any value back.
Then when I researched the problem , I added that : cmd.BindByName = true But this time i got the following error
multiple instances of named argument in list
C# codes :
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.InitialLONGFetchSize = 1000;
var seciliProsedur = "QUA_PRINTING.semifinished_lable_data";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = seciliProsedur;
cmd.BindByName = true;
object piece_num_id = gridViewMain.GetFocusedRowCellValue(gridViewMain.FocusedColumn);
OracleParameter PAR_ID1 = new OracleParameter();
PAR_ID1.ParameterName = "p_piece_id ";
PAR_ID1.OracleDbType = OracleDbType.Int32;
PAR_ID1.Direction = System.Data.ParameterDirection.Input;
PAR_ID1.Value =piece_num_id;
PAR_ID1.Size = 100;
cmd.Parameters.Add(PAR_ID1);
cmd.Parameters.Add("p_piece_id", OracleDbType.Varchar2, 1000, null, ParameterDirection.Output);
cmd.Parameters.Add("p_tickness", OracleDbType.Double,200, null, ParameterDirection.Output);
conn.Open();
var da = new OracleDataAdapter(cmd);
var dt = new DataTable();
da.Fill(dt);
How can I solve this problem ?
PAR_ID1.ParameterName = "p_piece_id ";has to bePAR_ID1.ParameterName = "p_piece_num_id";SQL Profilerto see what is the query executed in the server.