// // OciServerHandle.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 // // Copyright (C) Tim Coleman, 2003 // using System; using System.Runtime.InteropServices; namespace System.Data.OracleClient.Oci { internal sealed class OciServerHandle : OciHandle, IDisposable { #region Fields bool disposed = false; bool attached = false; OciErrorHandle errorHandle; #endregion // Fields #region Constructors public OciServerHandle (OciHandle parent, IntPtr newHandle) : base (OciHandleType.Server, parent, newHandle) { } #endregion // Constructors #region Methods public bool Attach (string tnsname, OciErrorHandle error) { errorHandle = error; int status = OciCalls.OCIServerAttach (this, error, tnsname, tnsname.Length, 0); if (status != 0) { OciErrorInfo info = errorHandle.HandleError (); throw new OracleException (info.ErrorCode, info.ErrorMessage); } attached = true; return attached; } public void Detach (OciErrorHandle error) { if (!attached) return; int status = OciCalls.OCIServerDetach (this, error, 0); if (status != 0) { OciErrorInfo info = errorHandle.HandleError (); throw new OracleException (info.ErrorCode, info.ErrorMessage); } attached = false; } protected override void Dispose (bool disposing) { if (!disposed) { try { //Detach (errorHandle); disposed = true; } finally { base.Dispose (disposing); } } } #endregion // Methods } }