Efter at have brugt mere end en dag på at undersøge dette blev jeg henvist til svaret kun 10 minutter efter at have sendt mit spørgsmål. Typisk!
Svaret blev fundet her - https://community.oracle.com/thread/659625 - og det eneste, der kræves, er at indpakke kaldekoden i en transaktion. Arbejdskoden ser sådan ud:
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);
}
}
}
}
Min begrænsede forståelse af løsningen er, at uden denne foretages en transaktion i SQL Server-enden, hvilket får den returnerede markør til at fejle i sin iteration, når den først er overført til .NET-koden. Hvis nogen har en bedre forklaring, bedes du tilføje dette spørgsmål.