After some discussion on IRC, this what some helpful people gave me. Marshal an IntPtr since it is the size of a native pointer. I believe an IntPtr can be casted to an int or long and vice-versa.
http://www.mono-project.com/Interop_with_Native_Libraries --- Daniel Morgan <[EMAIL PROTECTED]> wrote: > Date: Thu, 14 Feb 2008 17:28:41 -0800 (PST) > From: Daniel Morgan <[EMAIL PROTECTED]> > To: Edwin Kim <[EMAIL PROTECTED]>, > [email protected] > Subject: Re: [Mono-list] System.Data.OracleClient on > z/Linux > > Go to Mono's web site and go to the download page. > Download the source code to mono if you have not > already. Unarchive it somewhere. I assume you know > how to ungzip and untar a file. > > In the source, go to > mono_source/mcs/class/System.Data.OracleClient/System.Data.OracleClient.cs > > And look in file OciStatementHandle.cs at function > Prepare. You should see it calling the function > OCIUnicodeToCharSet. You need to see what the > function is actually passing returning via > Console.Error.WriteLine calls. > > Oracle Call Interface Programmer's Guide > http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/toc.htm > > Documentation for all Oracle products can be found > here: > http://tahiti.oracle.com/ > > sword OCIUnicodeToCharSet ( dvoid *hndl, > OraText *dst, > size_t dstlen, > CONST ub2 *src, > size_t srclen, > size_t *rsize ); > > The docs says these are the possible values that can > be returned: OCI_SUCCESS, OCI_INVALID_HANDLE. or > OCI_ERROR. I'm not sure the proper way to marshal a > size_t that will work on 32-bit and 64-bits systems. > > Perhaps someone reading this can shed some light. > > Also, take a look at OciCalls.cs and see how to > enable > tracing. You may need to re-build > System.Data.OracleClient to enable tracing. And I > think you would also need to set OCI_TRACE to point > to > the file to log tracing. > > --- Edwin Kim <[EMAIL PROTECTED]> wrote: > > > Thanks much!!! > > > > I'm new to Mono, OCI, and C#. > > I guess z/Linux running on the IBM z/800 > (mainframe) > > is big endian. > > > > I was able to display some information using > > environment variables: > > export MONO_LOG_LEVEL=info > > export MONO_LOG_MASK=dll > > > > Console output: > > > > Mono-INFO: Searching for 'OCISessionBegin'. > > Mono-INFO: Probing 'OCISessionBegin'. > > Mono-INFO: Found as 'OCISessionBegin'. > > Mono-INFO: DllImport attempting to load: > > 'libclntsh.so'. > > Mono-INFO: DllImport loading location: > > 'libclntsh.so'. > > Mono-INFO: Searching for 'OCIServerVersion'. > > Mono-INFO: Probing 'OCIServerVersion'. > > Mono-INFO: Found as 'OCIServerVersion'. > > Mono-INFO: DllImport attempting to load: > > 'libclntsh.so'. > > Mono-INFO: DllImport loading location: > > 'libclntsh.so'. > > Mono-INFO: Searching for 'OCICharSetToUnicode'. > > Mono-INFO: Probing 'OCICharSetToUnicode'. > > Mono-INFO: Found as 'OCICharSetToUnicode'. > > ServerVersion: Oracle Database > > DataSource: wpsdb > > Mono-INFO: DllImport attempting to load: > > 'libclntsh.so'. > > Mono-INFO: DllImport loading location: > > 'libclntsh.so'. > > Mono-INFO: Searching for 'OCIUnicodeToCharSet'. > > Mono-INFO: Probing 'OCIUnicodeToCharSet'. > > Mono-INFO: Found as 'OCIUnicodeToCharSet'. > > Unhandled Exception: > System.NullReferenceException: > > Object reference not set to an instance of an > object > > at > > > System.Data.OracleClient.Oci.OciStatementHandle.Prepare > > (System.String commandText) [0x00000] > > at > > > System.Data.OracleClient.OracleCommand.PrepareStatement > > (System.Data.OracleClient.Oci.OciStatementHandle > > statement) [0x00000] > > at > > > System.Data.OracleClient.OracleCommand.ExecuteReader > > (CommandBehavior behavior) [0x00000] > > at > > > System.Data.OracleClient.OracleCommand.ExecuteReader > > () [0x00000] > > at (wrapper remoting-invoke-with-check) > > > System.Data.OracleClient.OracleCommand:ExecuteReader > > () > > at Test.Main (System.String[] args) [0x00000] > > Mono-INFO: DllImport attempting to load: > > 'libclntsh.so'. > > Mono-INFO: DllImport loading location: > > 'libclntsh.so'. > > Mono-INFO: Searching for 'OCIHandleFree'. > > Mono-INFO: Probing 'OCIHandleFree'. > > Mono-INFO: Found as 'OCIHandleFree'. > > > > and source code: > > using System; > > using System.Data; > > using System.Data.OracleClient; > > public class Test > > { > > public static void Main (string[] args) > > { > > string connectionString = > > "Data Source=wpsdb;" + > > "User ID=test;" + > > "Password=test;"; > > OracleConnection dbcon = null; > > dbcon = new OracleConnection > > (connectionString); > > dbcon.Open (); > > Console.WriteLine("ServerVersion: " + > > dbcon.ServerVersion + "\nDataSource: " + > > dbcon.DataSource); > > > > OracleCommand dbcmd = dbcon.CreateCommand > (); > > string sql = "SELECT * FROM dual"; > > dbcmd.CommandText = sql; > > OracleDataReader reader = > dbcmd.ExecuteReader > > (); > > while (reader.Read ()) { > > System.Console.WriteLine( "." ); > > } > > // clean up > > reader.Close (); > > reader = null; > > dbcmd.CommandText = sql; > > dbcmd.ExecuteNonQuery (); > > dbcmd.Dispose (); > > dbcmd = null; > > dbcon.Close (); > > dbcon = null; > > } > > } > > > > > > ________________________________________ > > From: Daniel Morgan [EMAIL PROTECTED] > > Sent: Tuesday, February 12, 2008 9:08 PM > > To: Edwin Kim > > Subject: Re: [Mono-list] System.Data.OracleClient > on > > z/Linux > > > > I'm sorry. It does look that way. You could use > > ODBC > > instead. Or you could use a fully managed oracle > > provider, such as, one from DataDirect. > > > > It looks like Mono's OracleClient fails trying to > > call > > the Prepare function. Maybe OCI did not create an > > OCI > > statement handle. > > > > If you look in source in OciStatementHandle, it > may > > give you a clue where it is failing. You could > turn > > tracing on. > > > > Or you could put a bunch of > > Console.Error.WriteLine's > > checking the output of function calls to see what > is > > being returned. > > > > dbcmd.commandText fails to compile because you > were > > trying to access a member of OracleCommand that is > > private, protected, or internal. C# is case > > sesitive. > > If you need to access the CommandText property of > > OracleCommand, you have to spell it with the > correct > > capitalization. > > > > Is z/Linux running on the IBM z/800 big endian or > > little endian? I assume big endian. > > > > Mono's OracleClient was mainly developed on > Windows > > and Linux on 32-bit x86. So, there could be a > > problem > > with marshalling integers and unicode strings. > Does > > the IBM z/800 require alignment of integers? > > > > --- Edwin Kim <[EMAIL PROTECTED]> wrote: > > > > > Do you mean I can't use the OracleClient > provider > > > yet? > > > z/linux is 64-bit running on IBM z/800 > processor. > > > > > > > > > I was able to display the connection state and > > > dbcmd.CommandText on the screen: > > > > > > Code: > > > using System; > > > using System.Data; > > > using System.Data.OracleClient; > > > > > > public class Test > > > { > > > public static void Main (string[] args) > > > { > > > string connectionString = > > > "Data Source=wpsdb;" + > > > "User ID=test;" + > > > "Password=test;"; > > > OracleConnection dbcon = null; > > > dbcon = new OracleConnection > > > (connectionString); > > > dbcon.Open (); > > > Console.WriteLine("Connection State: " + > > > dbcon.State); > > > Console.WriteLine("ServerVersion: " + > > > dbcon.ServerVersion + "\nDataSource: " + > > > dbcon.DataSource); > > > string commandText = "SELECT * FROM > dual"; > > > OracleCommand dbcmd = new OracleCommand > > > (commandText, dbcon); > > > Console.WriteLine("commandText: " + > > > dbcmd.CommandText); > > > > > > OracleDataReader reader = > > dbcmd.ExecuteReader > > > (); > > > // clean up > > > reader.Close (); > > > reader = null; > > > dbcmd.Dispose (); > > > dbcmd = null; > > > dbcon.Close (); > > > dbcon = null; > > > } > > > } > > > === message truncated === > > > > > ____________________________________________________________________________________ > Never miss a thing. Make Yahoo your home page. > http://www.yahoo.com/r/hs > _______________________________________________ > Mono-list maillist - [email protected] > http://lists.ximian.com/mailman/listinfo/mono-list > ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs _______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
