[Mono-list] Mono and Oracle OCI character set encoding
Daniel Morgan
monodanmorg at yahoo.com
Wed Sep 9 16:41:41 EDT 2009
I was considering forking System.Data.OracleClient myself to get missing features that are found in ODP.NET, but I haven't.
Are you keeping this fork in some public source code repository? This would allow others to contribute patches.
--- On Wed, 9/9/09, James Dalton <james.dalton at deltadentalva.com> wrote:
> From: James Dalton <james.dalton at deltadentalva.com>
> Subject: [Mono-list] Mono and Oracle OCI character set encoding
> To: mono-list at lists.ximian.com
> Date: Wednesday, September 9, 2009, 1:18 PM
>
> We are looking into moving from Microsoft.Net to Mono
> (probably on openSUSE),
> one of the stumbling blocks has been working with Oracle.
> For Windows we use
> the ODP.Net provider, we looked into using
> System.Data.OracleClient, but
> neither version supports as much as ODP.Net, so we are
> rolling our own Mono
> to OCI code. I've gotten some things working, but I'm
> stumped trying to get
> string bind variables to work correctly. I have no problem
> with ref cursors
> and getting strings from ref cursors, just sending strings
> as a parameter in
> a stored procedure.
>
> I'm pretty sure my problem is with character set encoding,
> what C# sees and
> and PL/SQL sees don't match (the PL/SQL text is
> garbage.) I've tried
> different means of marshalling the strings and nothing is
> working what I
> have right now is (which should work according to the OCI
> docs):
>
> internal static extern int OCIBindByName(IntPtr stmtp,
>
>
> out IntPtr bindpp,
>
>
> IntPtr errhp,
>
>
> string placeholder,
>
>
> int placeh_len,
>
>
> ref IntPtr valuep,
>
>
> int value_sz,
>
>
> [MarshalAs (UnmanagedType.U2)]
> OciDataType dty,
>
>
> ref short indp,
>
>
> IntPtr alenp,
>
>
> IntPtr rcodep,
>
>
> uint maxarr_len,
>
>
> IntPtr curelp,
>
>
> uint mode);
>
> and
>
> parameterDef.DataType =
> OciDataType.String;
> parameterDef.ValueSource = parameter;
>
> size =
> Encoding.UTF8.GetMaxByteCount(size) + 1;
> parameterDef.BindSource =
> OciCalls.AllocateClear(size);
> if (paramDirection !=
> ParameterDirection.Out)
> {
> parameter += "\0";
> int status =
> OciCalls.OCIUnicodeToCharSet(OciSession.OciEnvironmentHandle,
> parameterDef.BindSource, size, parameter, parameter.Length,
> IntPtr.Zero);
> }
> parameterDef.Indicator = new short[1];
> if (string.IsNullOrEmpty(parameter) ||
> paramDirection ==
> ParameterDirection.Out)
> parameterDef.Indicator[0] = -1;
> else
> parameterDef.Indicator[0] = 0;
> OciCalls.OCIBindByName(OciStatementHandle,
> out
> parameterDef.OciBindHandle,
>
>
>
> OciSession.OciErrorHandle, ":" +
> parameterName, parameterName.Length + 1,
> ref parameterDef.BindSource, size,
> parameterDef.DataType, ref
> parameterDef.Indicator[0],
> IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero,
> 0);
>
> --
> View this message in context: http://www.nabble.com/Mono-and-Oracle-OCI-character-set-encoding-tp25368213p25368213.html
> Sent from the Mono - General mailing list archive at
> Nabble.com.
>
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
More information about the Mono-list
mailing list