Meskipun Anda menggunakan nama untuk parameter Anda, driver Anda memperlakukannya secara posisi. Anda dapat mengetahuinya karena (hampir) cocok dengan :1
dengan nama p_cr1
- '1' bukan nama yang valid. Itu tidak mengeluh karena cocok secara posisi - tetapi itu berarti mencoba menggunakan P_para
untuk :1
, dan sebagai jenis kesalahannya, itu menjelaskan kesalahan yang Anda lihat.
Mungkin ada cara untuk mengubah perilaku driver, tetapi untuk saat ini Anda dapat menukar urutan yang Anda ikat - sehingga ikatan terjadi dalam urutan (posisi) yang sama dengan variabel yang muncul dalam kueri. Jadi:
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);