<P>I might have found the source of <a href="https://bugzilla.novell.com/show_bug.cgi?id=486705" target="_top" rel="nofollow">Bug 486705</a>. For whatever reason, I am unable to create a <a href="https://secure-www.novell.com/selfreg/jsp/createAccount.jsp" target="_top" rel="nofollow">Novell account</a> so if someone could post this info to that Bug on my behalf, it would be much appreciated.
<code>NextResult()</code> of <code>OracleDataReader.cs</code> (Line 848) has a <code>//FIXME: get next result</code> comment in it that simply returns false - this should be changed to throw a <code>NotImplementedException</code>. Bug 486705 is simply that Mono does not currently support multiple result sets (ref cursors) but the lack of exceptions does not tell the user this. I think there are quite a few of these comments in the source, most if not all of them should be changed to <code>NotImplementedExceptions</code>.
We should also <a href="http://www.mono-project.com/Oracle" target="_top" rel="nofollow">document this</a>, but I don't seem to have the ability to change that wiki page.
<small><P>I wrote this a while back before I had the latest source code, but I thought I should just post it anyway for others to find when searching.
ExecuteReader(...) of System.Data.OracleClient.OracleCommand.cs (Line 580) does a for-loop over p (0 thru Parameters.Count), yet the loop itself does <b>not</b> use the loop-invariant (p) - instead it always uses '0' (i.e. Parameters on Line 581). The code in OracleCommand.cs, method GetNextResults() (Line 661) has the proper loop so my understanding is when Mono first gets the OracleDataReader/RefCursor, it <i>should</i> only get the first cursor. Later, command.NextResult() will be called by the user which will call GetNextResults() and properly get the next cursor.
This would explain to my why ExecuteReader(...) never worked for me, as my OUT cursors were never the first parameter in the Stored Procedure. I've had to save a reference to the OracleParameter when I declare it and then use param.Value after a call to ExecuteNonQuery(...) (which does work fine for multiple cursor out parameters). I think this is a new bug, as I wasn't able to find anything about it when searching (other than the possibly related Bug 486705).
This might explain Bug 486705 to me - Shao Jiaxing was able to get his first cursor out but couldn't get any data from any other cursors <i>if</i> the first parameter wasn't a cursor.
In the least, I would like to add some comments/documentation to explain what is happening here - does anyone know why I can't create a Novell account? It seems to time out.
<br><hr align="left" width="300">
View this message in context: <a href="http://www.nabble.com/Bug-486705-Update---Fix--tp22604148p22604148.html">Bug 486705 Update / Fix?</a><br>
Sent from the <a href="http://www.nabble.com/Mono---Dev-f1369.html">Mono - Dev mailing list archive</a> at Nabble.com.<br>