Въпреки че използвате имена за вашите параметри, вашият драйвер ги третира позиционно. Можете да разберете, защото (почти) съвпада с :1
с името p_cr1
- '1' не е валидно име. Не се оплаква, тъй като съвпада позиционно - но това означава, че се опитва да използва P_para
за :1
и тъй като типът е грешен, това обяснява грешката, която виждате.
Може да има начин да промените поведението на драйвера, но засега можете просто да размените реда, в който ги свързвате - така че свързванията да се случват в същия ред (позиция), в който променливите се появяват в заявката. И така:
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);