Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- EdmValidator.cs
- TextElementEnumerator.cs
- MarginCollapsingState.cs
- AllMembershipCondition.cs
- RequestCache.cs
- Vector3DAnimationBase.cs
- SmtpNegotiateAuthenticationModule.cs
- HttpModuleAction.cs
- SiteOfOriginPart.cs
- LogWriteRestartAreaState.cs
- HttpListenerPrefixCollection.cs
- TextHidden.cs
- ToolStripSeparatorRenderEventArgs.cs
- FontFamilyConverter.cs
- LinqDataSourceView.cs
- HttpWrapper.cs
- DesignerPerfEventProvider.cs
- HttpInputStream.cs
- HtmlTableCellCollection.cs
- ScrollData.cs
- StringUtil.cs
- ConfigurationException.cs
- DataTable.cs
- NamespaceInfo.cs
- ILGenerator.cs
- FileChangesMonitor.cs
- WorkflowInstanceExtensionManager.cs
- AudioStateChangedEventArgs.cs
- PrintPreviewDialog.cs
- DbDataSourceEnumerator.cs
- RegexNode.cs
- OrderedHashRepartitionEnumerator.cs
- DisableDpiAwarenessAttribute.cs
- DataPagerFieldCollection.cs
- MessageSmuggler.cs
- DurableOperationAttribute.cs
- SoapHttpTransportImporter.cs
- BitmapCodecInfo.cs
- SafeCertificateContext.cs
- Light.cs
- TransformPatternIdentifiers.cs
- LabelLiteral.cs
- DesignerOptions.cs
- DocComment.cs
- IteratorDescriptor.cs
- DataGridViewLinkCell.cs
- GraphicsPath.cs
- Thumb.cs
- UInt16.cs
- NameValueFileSectionHandler.cs
- CodeThrowExceptionStatement.cs
- SubMenuStyle.cs
- DataErrorValidationRule.cs
- RegisteredScript.cs
- SimpleTextLine.cs
- HtmlListAdapter.cs
- SoapSchemaImporter.cs
- COM2ExtendedUITypeEditor.cs
- NamedElement.cs
- TiffBitmapDecoder.cs
- MultipartIdentifier.cs
- ListItem.cs
- StrokeIntersection.cs
- PersonalizationStateInfoCollection.cs
- ScalarType.cs
- RegistrySecurity.cs
- WebContext.cs
- HttpListenerResponse.cs
- ViewgenGatekeeper.cs
- BinaryFormatter.cs
- XmlNodeComparer.cs
- StretchValidation.cs
- SqlDataSourceAdvancedOptionsForm.cs
- Utils.cs
- AssemblyBuilder.cs
- LinearKeyFrames.cs
- XmlAutoDetectWriter.cs
- CodeDomComponentSerializationService.cs
- _UncName.cs
- MergeFailedEvent.cs
- FileSecurity.cs
- GradientBrush.cs
- PropertyCondition.cs
- CircleHotSpot.cs
- EditorBrowsableAttribute.cs
- RotationValidation.cs
- SQLDoubleStorage.cs
- CSharpCodeProvider.cs
- UnmanagedBitmapWrapper.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- JsonFormatReaderGenerator.cs
- TransformerInfoCollection.cs
- SafeRightsManagementEnvironmentHandle.cs
- URL.cs
- MetadataArtifactLoaderComposite.cs
- FileRecordSequenceCompletedAsyncResult.cs
- ZipPackagePart.cs
- NamespaceTable.cs
- MessageQueuePermissionEntry.cs
- DataObjectPastingEventArgs.cs