मैं अभी तक यह स्पष्ट रूप से कहीं भी नहीं कह पाया है, लेकिन उदाहरणों का एक गुच्छा मैंने पाया है कि मैं क्या कर रहा हूं।क्या कनेक्शन बंद होने पर ODP.net एक रेफ कर्सर बंद करता है?
मेरे पास एक सी # कक्षा है जो ओरेकल डीबी से कनेक्ट करने के लिए ओडीपी.net का उपयोग करती है और पैकेज में एक प्रक्रिया चलाती है।
मेरे पैकेज ने प्रक्रियाओं को संग्रहीत किया है जो रेफ कर्सर आउटपुट पैरामीटर लेते हैं। सभी प्रक्रिया एक विशेष चयन कथन के लिए कर्सर खोलती है।
यदि मैं सीधे इस प्रक्रिया को ओरेकल डीबी पर निष्पादित करता हूं, तो आखिरकार मैं खुली कर्सर त्रुटि की अधिकतम संख्या को दबा दूंगा।
तो मैं सोच रहा था कि क्या ODP.net वास्तव में इस प्रक्रिया को बंद कर देता है जो मेरी प्रक्रिया में खोला गया था?
मैं OracleDataApaper.Fill (डेटासेट) विधि का उपयोग कर रहा हूं।
उदाहरण के लिए।
DataSet ds = new DataSet();
OracleConnection conn = new OracleConnection(this.connStr);
OracleCommand com = new OracleCommand("MYPKG.MYQUERY", conn);
OracleDataAdapter adapter = new OracleDataAdapter(com);
conn.Open();
com.Parameters.Add("searchParam", OracleDbType.Varchar2).Value = "myName";
com.Parameters.Add("outCursor", OracleDbType.RefCursor, ParameterDirection.Output);
com.CommandType = CommandType.StoredProcedure;
adapter.Fill(ds);
conn.Close();
PROCEDURE GETALLEMAILS(searchParamIN VARCHAR2, outCursor OUT sys_refcursor) AS
BEGIN
open outCursor
select
EAEMAL as Email
from
EmailTable
where
EmailName = searchParam;
END GETALLEMAILS;
मैं सिर्फ डीबी पर खुले कर्सर छोड़ने से डरता हूं। अगर कोई आधिकारिक दस्तावेज के लिंक प्रदान कर सकता है, तो यह बहुत अच्छा होगा!
अपडेट:
इनपुट के लिए धन्यवाद। मैं
com.Dispose();
conn.Close();
conn.Dispose();
पर कॉल कर रहा था लेकिन उन्हें मेरे उदाहरण से बाहर छोड़ दिया।
मुझे यह मंच पोस्ट मिला, जिसमें कहा गया है कि भरने() विधि को निष्पादित करने के बाद OracleDataAdapter.Fill (डेटासेट) विधि रेफ कर्सर को रिलीज़ करती है।
http://www.frontoracle.com/oracle-archive/140/386140-close-ref-cursor.html
काश ओरेकल प्रलेखन इस प्रक्रिया का वर्णन हालांकि में अधिक स्पष्ट किया गया था।
यदि आप उपयोग करते हैं तो ऑब्जेक्ट्स की सूची में ओरेकलडेटा रीडर जोड़ना होगा ऐसा लगता है कि हमारे "अधिकतम खुले कर्सर" समस्या हल हो गई है। – Fueled