1

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 ?

3
  • 1
    PAR_ID1.ParameterName = "p_piece_id "; has to be PAR_ID1.ParameterName = "p_piece_num_id"; Commented Jun 18, 2020 at 14:11
  • Yes , I fix it but execute it from c# app I don't get any value back again. Commented Jun 18, 2020 at 14:18
  • Your parameters / data types etc doesn't seems to be "proper", names not matching, lot of places to look for. Check the values of variables are there before execution. If still cannot use SQL Profiler to see what is the query executed in the server. Commented Jun 18, 2020 at 15:34

1 Answer 1

1

Actually I never used CommandType = CommandType.StoredProcedure.

Try this

cmd.CommandType = CommandType.Text;
seciliProsedur = "BEGIN QUA_PRINTING.semifinished_lable_data(:p_piece_num_id  , :p_piece_id, :p_tickness); END;"

OracleParameter PAR_ID1 = new OracleParameter();
PAR_ID1.ParameterName = "p_piece_num_id";
...
cmd.Parameters.Add("p_piece_id", OracleDbType.Varchar2, ParameterDirection.Output);
cmd.Parameters("p_piece_id").DbType = DbType.Varchar2;
cmd.Parameters.Add("p_tickness", OracleDbType.Varchar2, 240, null, ParameterDirection.Output);
cmd.Parameters("p_tickness").DbType = DbType.String;

I think you must set DbType and OracleDbType property.

Then another problem of your code is

var da = new OracleDataAdapter(cmd);
var dt = new DataTable();
da.Fill(dt);

Your procedure does not return any resultSet (i.e. RefCursor), thus above commands do not work. Use

cmd.ExecuteNonQuery()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.