Hoewel u namen voor uw parameters gebruikt, behandelt uw stuurprogramma ze positioneel. Je kunt het een beetje zien omdat het (bijna) overeenkomt met :1
met de naam p_cr1
- '1' is geen geldige naam. Het klaagt niet omdat het positioneel overeenkomt - maar dat betekent dat het de P_para
probeert te gebruiken voor :1
, en omdat het type fout is, verklaart dat de fout die je ziet.
Er is misschien een manier om het gedrag van de driver te veranderen, maar voorlopig kun je de volgorde waarin je ze bindt omwisselen - zodat de bindingen plaatsvinden in dezelfde volgorde (positie) als de variabelen in de query. Dus:
cmd.Parameters.Add("p_cr1", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
cmd.Parameters.Add(new OracleParameter(":P_para", OracleDbType.Int64)).Value = Convert.ToInt64(Textbox.Text);
cmd.Parameters.Add("p_cr2", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);