パラメータに名前を使用していますが、ドライバはそれらを位置的に処理しています。 :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);