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
- Assembly.cs
- ImageListStreamer.cs
- HiddenFieldPageStatePersister.cs
- RegexTree.cs
- XamlWriter.cs
- RealizationContext.cs
- EventWaitHandle.cs
- RenderDataDrawingContext.cs
- SimpleHandlerFactory.cs
- TabItemAutomationPeer.cs
- DbProviderServices.cs
- RelationshipType.cs
- Route.cs
- HandlerFactoryCache.cs
- PageWrapper.cs
- HtmlControlPersistable.cs
- SchemaDeclBase.cs
- ValidationVisibilityAttribute.cs
- MessageDesigner.cs
- SinglePageViewer.cs
- sqlinternaltransaction.cs
- HitTestDrawingContextWalker.cs
- TextBounds.cs
- SourceElementsCollection.cs
- CodeAttributeArgumentCollection.cs
- DataSourceDescriptorCollection.cs
- TextEndOfSegment.cs
- HwndSubclass.cs
- DesignerForm.cs
- XmlCharCheckingWriter.cs
- RelatedImageListAttribute.cs
- ThicknessKeyFrameCollection.cs
- GlyphRunDrawing.cs
- SequenceDesignerAccessibleObject.cs
- WpfPayload.cs
- ClrProviderManifest.cs
- GridViewSelectEventArgs.cs
- StandardMenuStripVerb.cs
- SqlMethods.cs
- WinCategoryAttribute.cs
- ToolboxItemFilterAttribute.cs
- FileUtil.cs
- GreaterThanOrEqual.cs
- ParseHttpDate.cs
- PriorityRange.cs
- Validator.cs
- TextShapeableCharacters.cs
- NegatedCellConstant.cs
- Wizard.cs
- CachedPathData.cs
- EmptyStringExpandableObjectConverter.cs
- Size3DConverter.cs
- SelectionPatternIdentifiers.cs
- hebrewshape.cs
- SamlAudienceRestrictionCondition.cs
- EntityCollection.cs
- RowCache.cs
- QueueProcessor.cs
- DatagridviewDisplayedBandsData.cs
- SqlUserDefinedTypeAttribute.cs
- RuleElement.cs
- StartUpEventArgs.cs
- ErrorTableItemStyle.cs
- ConvertEvent.cs
- AnnotationMap.cs
- CroppedBitmap.cs
- WindowsFormsSynchronizationContext.cs
- ALinqExpressionVisitor.cs
- FormatException.cs
- MailHeaderInfo.cs
- Int32Collection.cs
- SiteIdentityPermission.cs
- ImageKeyConverter.cs
- WebBrowserNavigatedEventHandler.cs
- ToolTipAutomationPeer.cs
- DetailsViewPageEventArgs.cs
- BindableTemplateBuilder.cs
- SafeNativeMethodsOther.cs
- ToolboxSnapDragDropEventArgs.cs
- RoutedUICommand.cs
- FixUp.cs
- NetTcpSectionData.cs
- PageHandlerFactory.cs
- XsdBuildProvider.cs
- RowType.cs
- SynchronizationContext.cs
- ObjectDataSourceEventArgs.cs
- InstallerTypeAttribute.cs
- PriorityBinding.cs
- ThicknessAnimationUsingKeyFrames.cs
- XmlSchemaAttribute.cs
- CatalogZoneBase.cs
- Italic.cs
- FormViewPageEventArgs.cs
- EmptyElement.cs
- CaseCqlBlock.cs
- Button.cs
- TextLineResult.cs
- CheckBoxBaseAdapter.cs
- ExpressionPrinter.cs