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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ItemsPanelTemplate.cs
- SingleSelectRootGridEntry.cs
- XsltQilFactory.cs
- XmlSerializerVersionAttribute.cs
- GlyphRun.cs
- _HelperAsyncResults.cs
- ConfigurationProperty.cs
- MobileSysDescriptionAttribute.cs
- Function.cs
- EntityDataSourceDataSelectionPanel.cs
- WhitespaceRule.cs
- HttpHandlersSection.cs
- SplashScreen.cs
- CodeSnippetStatement.cs
- PagePropertiesChangingEventArgs.cs
- Vector3D.cs
- ArgumentOutOfRangeException.cs
- TaskDesigner.cs
- GenericIdentity.cs
- RadioButtonPopupAdapter.cs
- DelayDesigner.cs
- Viewport3DVisual.cs
- SafeEventLogWriteHandle.cs
- SmiXetterAccessMap.cs
- XsltSettings.cs
- List.cs
- PointF.cs
- DSASignatureDeformatter.cs
- NamespaceQuery.cs
- Stylesheet.cs
- FullTrustAssembliesSection.cs
- Material.cs
- EventItfInfo.cs
- Matrix.cs
- MarkerProperties.cs
- Grammar.cs
- LayoutEvent.cs
- CacheMode.cs
- Site.cs
- DataControlCommands.cs
- SqlHelper.cs
- AbsoluteQuery.cs
- KeyEventArgs.cs
- EmptyImpersonationContext.cs
- ServicePointManagerElement.cs
- ISO2022Encoding.cs
- X509Certificate.cs
- DataGridTablesFactory.cs
- DataGridViewCellEventArgs.cs
- VisualStyleElement.cs
- DoubleKeyFrameCollection.cs
- HttpCacheParams.cs
- DataBinding.cs
- Ports.cs
- SystemTcpConnection.cs
- FixedPosition.cs
- mda.cs
- ServiceModelSecurityTokenRequirement.cs
- DataGridViewMethods.cs
- PenContexts.cs
- ServiceSettingsResponseInfo.cs
- ServiceOperationParameter.cs
- CommandValueSerializer.cs
- MemoryRecordBuffer.cs
- PrimaryKeyTypeConverter.cs
- ThreadAbortException.cs
- HMACMD5.cs
- EnumValAlphaComparer.cs
- InvalidProgramException.cs
- NamedPipeTransportElement.cs
- HMACSHA384.cs
- SecurityResources.cs
- BamlRecordWriter.cs
- _TransmitFileOverlappedAsyncResult.cs
- TextElement.cs
- HttpClientChannel.cs
- TypedElement.cs
- EditorPart.cs
- SoapExtension.cs
- GenerateScriptTypeAttribute.cs
- Button.cs
- COM2EnumConverter.cs
- DataGridViewCellStyleEditor.cs
- HttpWebRequestElement.cs
- SafeLibraryHandle.cs
- XmlSerializationReader.cs
- UrlAuthorizationModule.cs
- ToolStripRenderEventArgs.cs
- TextCompositionManager.cs
- ButtonColumn.cs
- BindableTemplateBuilder.cs
- ThreadInterruptedException.cs
- DiscardableAttribute.cs
- RenderingBiasValidation.cs
- _SSPISessionCache.cs
- PartialClassGenerationTaskInternal.cs
- XmlSchemaAnyAttribute.cs
- TempFiles.cs
- LoginView.cs
- ListViewInsertEventArgs.cs