Även om du använder namn för dina parametrar, behandlar din förare dem positionsmässigt. Du kan avgöra eftersom det (nästan) matchar :1
med namnet p_cr1
- '1' är inte ett giltigt namn. Den klagar inte eftersom den matchar positionellt - men det betyder att den försöker använda P_para
för :1
, och eftersom typen av det är fel, förklarar det felet du ser.
Det kan mycket väl finnas ett sätt att ändra förarens beteende, men för närvarande kan du bara byta ordningen du binder dem - så bindningarna sker i samma ordning (position) som variablerna visas i frågan. Så:
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);