OciEnlistContext.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / DataOracleClient / System / Data / OracleClient / OciEnlistContext.cs / 1 / OciEnlistContext.cs

                            //------------------------------------------------------------------------------ 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
namespace System.Data.OracleClient 
{
    using System; 
    using System.Data.Common;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices; 
    using System.Threading;
    using SysTx = System.Transactions; 
    using System.Runtime.ConstrainedExecution; 

    sealed internal class OciEnlistContext : SafeHandle { 

        private OciServiceContextHandle _serviceContextHandle;

        internal OciEnlistContext(byte[] userName, byte[] password, byte[] serverName, OciServiceContextHandle serviceContextHandle, OciErrorHandle  errorHandle) : base(IntPtr.Zero, true) { 
            RuntimeHelpers.PrepareConstrainedRegions();
            try {} finally { 
                _serviceContextHandle = serviceContextHandle; 

                int rc = 0; 

                try {
                    rc = TracedNativeMethods.OraMTSEnlCtxGet(userName, password, serverName, _serviceContextHandle, errorHandle, out base.handle);
                } 
                catch (DllNotFoundException e) {
                    throw ADP.DistribTxRequiresOracleServicesForMTS(e); 
                } 

                if (0 != rc) { 
                    OracleException.Check(errorHandle, rc);
                }

                // Make sure the transaction context is disposed before the service 
                // context is.
                serviceContextHandle.AddRef(); 
            } 
        }
 
        public override bool IsInvalid {
            get {
                return (IntPtr.Zero == base.handle);
            } 
        }
 
        internal void Join(OracleInternalConnection internalConnection, SysTx.Transaction indigoTransaction) { 
            SysTx.IDtcTransaction oleTxTransaction = ADP.GetOletxTransaction(indigoTransaction);
 
            int rc = TracedNativeMethods.OraMTSJoinTxn(this, oleTxTransaction);

            if (0 != rc) {
                OracleException.Check(rc, internalConnection); 
            }
        } 
 
        override protected bool ReleaseHandle() {
            // NOTE: The SafeHandle class guarantees this will be called exactly once. 
            IntPtr ptr = base.handle;
            base.handle = IntPtr.Zero;
            if (IntPtr.Zero != ptr) {
                TracedNativeMethods.OraMTSEnlCtxRel(ptr); 
            }
 
            // OK, now we can release the service context. 
            if (null != _serviceContextHandle) {
                _serviceContextHandle.Release(); 
                _serviceContextHandle = null;
            }
            return true;
        } 

        internal static void SafeDispose(ref OciEnlistContext ociEnlistContext) { 
            //  Safely disposes of the handle (even if it is already null) and 
            //  then nulls it out.
            if (null != ociEnlistContext) { 
                ociEnlistContext.Dispose();
            }
            ociEnlistContext = null;
        } 
        //---------------------------------------------------------------------
        static internal IntPtr HandleValueToTrace (OciEnlistContext handle) 
        { 
            return handle.DangerousGetHandle(); // for tracing purposes, it's safe to just print this -- no handle recycling issues.
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
namespace System.Data.OracleClient 
{
    using System; 
    using System.Data.Common;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices; 
    using System.Threading;
    using SysTx = System.Transactions; 
    using System.Runtime.ConstrainedExecution; 

    sealed internal class OciEnlistContext : SafeHandle { 

        private OciServiceContextHandle _serviceContextHandle;

        internal OciEnlistContext(byte[] userName, byte[] password, byte[] serverName, OciServiceContextHandle serviceContextHandle, OciErrorHandle  errorHandle) : base(IntPtr.Zero, true) { 
            RuntimeHelpers.PrepareConstrainedRegions();
            try {} finally { 
                _serviceContextHandle = serviceContextHandle; 

                int rc = 0; 

                try {
                    rc = TracedNativeMethods.OraMTSEnlCtxGet(userName, password, serverName, _serviceContextHandle, errorHandle, out base.handle);
                } 
                catch (DllNotFoundException e) {
                    throw ADP.DistribTxRequiresOracleServicesForMTS(e); 
                } 

                if (0 != rc) { 
                    OracleException.Check(errorHandle, rc);
                }

                // Make sure the transaction context is disposed before the service 
                // context is.
                serviceContextHandle.AddRef(); 
            } 
        }
 
        public override bool IsInvalid {
            get {
                return (IntPtr.Zero == base.handle);
            } 
        }
 
        internal void Join(OracleInternalConnection internalConnection, SysTx.Transaction indigoTransaction) { 
            SysTx.IDtcTransaction oleTxTransaction = ADP.GetOletxTransaction(indigoTransaction);
 
            int rc = TracedNativeMethods.OraMTSJoinTxn(this, oleTxTransaction);

            if (0 != rc) {
                OracleException.Check(rc, internalConnection); 
            }
        } 
 
        override protected bool ReleaseHandle() {
            // NOTE: The SafeHandle class guarantees this will be called exactly once. 
            IntPtr ptr = base.handle;
            base.handle = IntPtr.Zero;
            if (IntPtr.Zero != ptr) {
                TracedNativeMethods.OraMTSEnlCtxRel(ptr); 
            }
 
            // OK, now we can release the service context. 
            if (null != _serviceContextHandle) {
                _serviceContextHandle.Release(); 
                _serviceContextHandle = null;
            }
            return true;
        } 

        internal static void SafeDispose(ref OciEnlistContext ociEnlistContext) { 
            //  Safely disposes of the handle (even if it is already null) and 
            //  then nulls it out.
            if (null != ociEnlistContext) { 
                ociEnlistContext.Dispose();
            }
            ociEnlistContext = null;
        } 
        //---------------------------------------------------------------------
        static internal IntPtr HandleValueToTrace (OciEnlistContext handle) 
        { 
            return handle.DangerousGetHandle(); // for tracing purposes, it's safe to just print this -- no handle recycling issues.
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK