Selvom du bruger navne til dine parametre, behandler din driver dem positionelt. Du kan lidt se, fordi det (næsten) matcher :1
med navnet p_cr1
- '1' er ikke et gyldigt navn. Den klager ikke, da den matcher positionelt - men det betyder, at den forsøger at bruge P_para
for :1
, og da typen af det er forkert, forklarer det den fejl du ser.
Der kan godt være en måde at ændre driverens adfærd på, men indtil videre kan du bare bytte den rækkefølge, du binder dem - så bindene opstår i samme rækkefølge (position), som variablerne vises i forespørgslen. 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);