int xtramem_sz,
IntPtr usrmempp);
+ [DllImport ("oci")]
+ internal static extern int OCICacheFree (IntPtr envhp,
+ IntPtr errhp,
+ IntPtr stmthp);
+
[DllImport ("oci")]
internal static extern int OCIAttrGet (IntPtr trgthndlp,
[MarshalAs (UnmanagedType.U4)] OciHandleType trghndltyp,
[MarshalAs (UnmanagedType.SysUInt)] int dstlen,
byte [] src,
[MarshalAs (UnmanagedType.SysUInt)] int srclen,
- [MarshalAs (UnmanagedType.SysUInt)] out int rsize);
+ out long rsize);
[DllImport ("oci")]
internal static extern int OCIUnicodeToCharSet (
[MarshalAs (UnmanagedType.SysUInt)] int dstlen,
[MarshalAs (UnmanagedType.LPWStr)] string src,
[MarshalAs (UnmanagedType.SysUInt)] int srclen,
- [MarshalAs (UnmanagedType.SysUInt)] out int rsize);
+ out long rsize);
}
#endregion
xtramem_sz, usrmempp);
}
+ internal static int OCICacheFree (IntPtr envhp,
+ IntPtr svchp,
+ IntPtr stmthp)
+ {
+ #if TRACE
+ Trace.WriteLineIf(traceOci, "OCICacheFree", "OCI");
+ #endif
+ return OciNativeCalls.OCICacheFree (envhp, svchp, stmthp);
+ }
+
internal static int OCIAttrGet (IntPtr trgthndlp,
OciHandleType trghndltyp,
out IntPtr attributep,
byte [] src,
out int rsize)
{
+ int rc;
+ long retSize;
+
#if TRACE
Trace.WriteLineIf(traceOci, "OCICharSetToUnicode", "OCI");
#endif
-
- return OciNativeCalls.OCICharSetToUnicode (svchp, dst, dst!=null ? dst.Capacity : 0, src, src.Length, out rsize);
+ rc = OciNativeCalls.OCICharSetToUnicode (svchp, dst,
+ (dst != null ? dst.Capacity : 0),
+ src, src.Length, out retSize);
+ rsize = (int) retSize;
+ return(rc);
}
internal static int OCIUnicodeToCharSet (
IntPtr svchp,
byte [] dst,
- [MarshalAs (UnmanagedType.LPWStr)] string src,
- [MarshalAs (UnmanagedType.SysUInt)] out int rsize)
+ string src,
+ out int rsize)
{
+ int rc;
+ long retSize;
+
#if TRACE
Trace.WriteLineIf(traceOci, "OCIUnicodeToCharSet", "OCI");
#endif
- return OciNativeCalls.OCIUnicodeToCharSet (svchp, dst, dst!=null ? dst.Length : 0, src, src.Length, out rsize);
+ rc = OciNativeCalls.OCIUnicodeToCharSet (svchp, dst,
+ (dst != null ? dst.Length : 0),
+ src, src.Length, out retSize);
+ rsize = (int) retSize;
+ return(rc);
}
[DllImport ("oci")]
bool moreResults;
OciServiceHandle serviceHandle;
ArrayList values;
+ ArrayList parm;
OracleCommand command;
#endregion // Fields
if (disposing) {
if (values != null) {
- foreach (OciDefineHandle h in values)
+ foreach (OciDefineHandle h in values)
h.Dispose ();
values = null;
}
}
-
base.Dispose (disposing);
}
}
OciParameterDescriptor output = new OciParameterDescriptor (this, handle);
output.ErrorHandle = ErrorHandle;
+ if (parm == null)
+ parm = new ArrayList();
+ parm.Add(handle);
return output;
}
switch (status) {
case OciGlue.OCI_NO_DATA:
moreResults = false;
+ foreach (IntPtr h in parm)
+ OciCalls.OCIDescriptorFree(h, OciHandleType.Parameter);
break;
case OciGlue.OCI_DEFAULT:
moreResults = true;
using System.Data.OracleClient.Oci;
using System.Drawing.Design;
using System.Text;
+using System.Threading;
namespace System.Data.OracleClient
{
private void BindParameters (OciStatementHandle statement)
{
+Console.Error.WriteLine("{0} - BindParameter",Thread.CurrentThread.ManagedThreadId);
for (int p = 0; p < Parameters.Count; p++)
Parameters[p].Bind (statement, Connection, (uint) p);
}
private void SafeDisposeHandle (OciStatementHandle h)
{
- if (h != null && h != preparedStatement)
+ if (h != null && h != preparedStatement)
h.Dispose();
}
protected override void Dispose (bool disposing)
{
+ if (preparedStatement != null)
+ OciCalls.OCIHandleFree(preparedStatement,
+ OciHandleType.Statement);
if (disposing)
if (Parameters.Count > 0)
foreach (OracleParameter parm in Parameters)