Bien que vous utilisiez des noms pour vos paramètres, votre pilote les traite par position. Vous pouvez en quelque sorte le dire car il correspond (presque) à :1
avec le nom p_cr1
- '1' n'est pas un nom valide. Il ne se plaint pas car il correspond en position - mais cela signifie qu'il essaie d'utiliser le P_para
pour :1
, et comme le type est faux, cela explique l'erreur que vous voyez.
Il existe peut-être un moyen de modifier le comportement du pilote, mais pour l'instant, vous pouvez simplement échanger l'ordre dans lequel vous les liez - afin que les liaisons se produisent dans le même ordre (position) que les variables apparaissent dans la requête. Donc :
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);