इसकी जांच में एक दिन से अधिक समय बिताने के बाद मुझे अपना प्रश्न पोस्ट करने के केवल 10 मिनट बाद उत्तर के लिए निर्देशित किया गया था। विशिष्ट!
जवाब यहां मिला - https://community.oracle.com/thread/659625 - और केवल लेन-देन में कॉलिंग कोड को लपेटना आवश्यक है। कार्य कोड इस तरह दिखता है:
using (var connection = new OracleConnection(connstring))
{
connection.Open();
using (var command = connection.CreateCommand())
{
// Start a local transaction
using (var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
// Assign transaction object for a pending local transaction
command.Transaction = transaction;
command.CommandText = "FNC_AXA_APPTS";
command.CommandType = CommandType.StoredProcedure;
OracleParameter retVal = new OracleParameter("PRS", OracleDbType.RefCursor);
retVal.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(retVal);
command.Parameters.Add(new OracleParameter("EG_PARAM", OracleDbType.Varchar2, 50)).Value = paramValue;
command.ExecuteNonQuery();
using (OracleDataReader reader = ((OracleRefCursor)command.Parameters["PRS"].Value).GetDataReader())
{
dt.Load(reader);
}
}
}
}
समाधान के बारे में मेरी सीमित समझ यह है कि इसके बिना SQL सर्वर के अंत में एक लेन-देन किया जाता है जो .NET कोड को पास करने के बाद लौटा हुआ कर्सर अपने पुनरावृत्ति में विफल हो जाता है। अगर किसी के पास बेहतर स्पष्टीकरण है तो कृपया इस प्रश्न में जोड़ें।