Ačkoli pro své parametry používáte názvy, váš ovladač s nimi zachází pozičně. Poznáte to, protože (téměř) odpovídá :1
s názvem p_cr1
- '1' není platné jméno. Nestěžuje si, protože se pozičně shoduje – ale to znamená, že se pokouší použít P_para
pro :1
, a protože typ je nesprávný, vysvětluje to chybu, kterou vidíte.
Může existovat způsob, jak změnit chování ovladače, ale prozatím můžete pouze zaměnit pořadí, ve kterém je vážete - takže vazby probíhají ve stejném pořadí (pozici), v jakém se proměnné objevují v dotazu. Takže:
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);