Chociaż używasz nazw dla swoich parametrów, twój kierowca traktuje je pozycyjnie. Możesz powiedzieć, ponieważ (prawie) pasuje do :1
o nazwie p_cr1
- „1” nie jest prawidłową nazwą. Nie narzeka, ponieważ pasuje pozycyjnie - ale to oznacza, że próbuje użyć P_para
dla :1
, a ponieważ rodzaj tego jest nieprawidłowy, wyjaśnia to wyświetlany błąd.
Równie dobrze może istnieć sposób na zmianę zachowania sterownika, ale na razie możesz po prostu zamienić kolejność ich wiązania - więc wiązania występują w tej samej kolejności (pozycji), w jakiej zmienne pojawiają się w zapytaniu. A więc:
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);