using System.Runtime.InteropServices;
namespace System.Data.OracleClient.Oci {
- internal class OciEnvironmentHandle : IOciHandle, IDisposable
+ internal class OciEnvironmentHandle : OciHandle, IDisposable
{
- #region Fields
-
- IntPtr handle;
-
- #endregion // Fields
-
#region Constructors
public OciEnvironmentHandle ()
}
public OciEnvironmentHandle (OciEnvironmentMode mode)
- {
- int status = 0;
- this.handle = IntPtr.Zero;
-
- status = OCIEnvCreate (out handle, mode,
- IntPtr.Zero,
- IntPtr.Zero,
- IntPtr.Zero,
- IntPtr.Zero,
- 0,
- IntPtr.Zero);
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public IntPtr Handle {
- get { return handle; }
- set { handle = value; }
- }
-
- public OciHandleType HandleType {
- get { return OciHandleType.Environment; }
- }
-
- #endregion // Properties
-
- #region Methods
-
- [DllImport ("oci")]
- public static extern int OCIEnvCreate (out IntPtr envhpp,
- [MarshalAs (UnmanagedType.U4)] OciEnvironmentMode mode,
- IntPtr ctxp,
- IntPtr malocfp,
- IntPtr ralocfp,
- IntPtr mfreep,
- int xtramem_sz,
- IntPtr usrmempp);
-
- [DllImport ("oci")]
- public static extern int OCIHandleAlloc (IntPtr parenth,
- out IntPtr hndlpp,
- [MarshalAs (UnmanagedType.U4)] OciHandleType type,
- int xtramem_sz,
- IntPtr usrmempp);
-
- [DllImport ("oci")]
- public static extern int OCIHandleFree (IntPtr hndlp,
- [MarshalAs (UnmanagedType.U4)] OciHandleType type);
-
-
- public IOciHandle Allocate (OciHandleType type)
+ : base (OciHandleType.Environment, null, IntPtr.Zero)
{
IntPtr newHandle = IntPtr.Zero;
- int status = 0;
-
- status = OCIHandleAlloc (Handle,
- out newHandle,
- type,
- 0,
+ OciCalls.OCIEnvCreate (out newHandle,
+ mode,
+ IntPtr.Zero,
+ IntPtr.Zero,
+ IntPtr.Zero,
+ IntPtr.Zero,
+ 0,
IntPtr.Zero);
- if (status != 0 && status != 1)
- return null;
- switch (type) {
- case OciHandleType.Service:
- return new OciServiceHandle (this, newHandle);
- case OciHandleType.Error:
- return new OciErrorHandle (this, newHandle);
- case OciHandleType.Server:
- return new OciServerHandle (this, newHandle);
- case OciHandleType.Session:
- return new OciSessionHandle (this, newHandle);
- case OciHandleType.Statement:
- return new OciStatementHandle (this, newHandle);
- case OciHandleType.Transaction:
- return new OciTransactionHandle (this, newHandle);
- default:
- OCIHandleFree (newHandle, type);
- newHandle = IntPtr.Zero;
- throw new ArgumentException ("Invalid handle type.");
- }
+ SetHandle (newHandle);
}
- public void Dispose ()
- {
- FreeHandle (this);
- }
+ #endregion // Constructors
- public void FreeHandle (IOciHandle toBeDisposed)
- {
- OCIHandleFree (toBeDisposed.Handle, toBeDisposed.HandleType);
- toBeDisposed.Handle = IntPtr.Zero;
- }
+ #region Methods
public OciErrorInfo HandleError ()
{
info.ErrorCode = 0;
info.ErrorMessage = String.Empty;
- OciGlue.OCIErrorGet (handle,
+ OciCalls.OCIErrorGet (Handle,
1,
IntPtr.Zero,
out info.ErrorCode,