यद्यपि आप अपने मापदंडों के लिए नामों का उपयोग कर रहे हैं, आपका ड्राइवर उन्हें स्थितिगत रूप से व्यवहार कर रहा है। आप बता सकते हैं क्योंकि यह (लगभग) मेल खा रहा है :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);