| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- //
- // OciEnvironmentHandle.cs
- //
- // Part of managed C#/.NET library System.Data.OracleClient.dll
- //
- // Part of the Mono class libraries at
- // mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci
- //
- // Assembly: System.Data.OracleClient.dll
- // Namespace: System.Data.OracleClient.Oci
- //
- // Author:
- // Tim Coleman <[email protected]>
- //
- // Copyright (C) Tim Coleman, 2003
- //
- using System;
- using System.Runtime.InteropServices;
- namespace System.Data.OracleClient.Oci {
- internal class OciEnvironmentHandle : IOciHandle, IDisposable
- {
- #region Fields
- IntPtr handle;
- #endregion // Fields
- #region Constructors
- public OciEnvironmentHandle ()
- : this (OciEnvironmentMode.Default)
- {
- }
- 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)
- {
- IntPtr newHandle = IntPtr.Zero;
- int status = 0;
- status = OCIHandleAlloc (Handle,
- out newHandle,
- type,
- 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.");
- }
- }
- public void Dispose ()
- {
- FreeHandle (this);
- }
- public void FreeHandle (IOciHandle toBeDisposed)
- {
- OCIHandleFree (toBeDisposed.Handle, toBeDisposed.HandleType);
- toBeDisposed.Handle = IntPtr.Zero;
- }
- public OciErrorInfo HandleError ()
- {
- int errbufSize = 512;
- IntPtr errbuf = Marshal.AllocHGlobal (errbufSize);
- OciErrorInfo info;
- info.ErrorCode = 0;
- info.ErrorMessage = String.Empty;
- OciGlue.OCIErrorGet (handle,
- 1,
- IntPtr.Zero,
- out info.ErrorCode,
- errbuf,
- (uint) errbufSize,
- OciHandleType.Environment);
- object err = Marshal.PtrToStringAnsi (errbuf);
- if (err != null) {
- string errmsg = (string) err;
- info.ErrorMessage = String.Copy (errmsg);
- Marshal.FreeHGlobal (errbuf);
- }
- return info;
- }
- #endregion // Methods
- }
- }
|