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
- ResXBuildProvider.cs
- PbrsForward.cs
- SweepDirectionValidation.cs
- LinearGradientBrush.cs
- MultiSelectRootGridEntry.cs
- AdRotator.cs
- RawContentTypeMapper.cs
- TablePattern.cs
- PackWebRequest.cs
- SqlWriter.cs
- Memoizer.cs
- MessageSmuggler.cs
- ConfigurationPropertyCollection.cs
- AutomationTextAttribute.cs
- InstancePersistenceEvent.cs
- GorillaCodec.cs
- PointHitTestResult.cs
- NegationPusher.cs
- SecUtil.cs
- TextWriterEngine.cs
- MouseGestureValueSerializer.cs
- SqlWebEventProvider.cs
- MultiPropertyDescriptorGridEntry.cs
- EnumConverter.cs
- StylusPointPropertyUnit.cs
- SmtpAuthenticationManager.cs
- TypeResolver.cs
- ImageAutomationPeer.cs
- FormViewInsertEventArgs.cs
- SubMenuStyleCollection.cs
- XmlWrappingReader.cs
- EdmConstants.cs
- WorkflowViewService.cs
- GlyphRun.cs
- StackSpiller.Bindings.cs
- TimeSpanStorage.cs
- OrthographicCamera.cs
- DataGridHeaderBorder.cs
- QuaternionAnimation.cs
- GlobalizationSection.cs
- BaseTypeViewSchema.cs
- ExpressionParser.cs
- XmlSchemaAnyAttribute.cs
- AssociationSetEnd.cs
- SessionStateModule.cs
- AudioDeviceOut.cs
- ContextMenuAutomationPeer.cs
- Codec.cs
- ViewBase.cs
- KeyInterop.cs
- StylusPointDescription.cs
- ReadWriteSpinLock.cs
- PartManifestEntry.cs
- CharStorage.cs
- SqlFileStream.cs
- DbParameterCollectionHelper.cs
- TrackingValidationObjectDictionary.cs
- ObjectParameter.cs
- TypeElementCollection.cs
- SkewTransform.cs
- SqlBulkCopyColumnMapping.cs
- SingleAnimationBase.cs
- X509CertificateValidator.cs
- GridView.cs
- CustomGrammar.cs
- RootBrowserWindowAutomationPeer.cs
- ImmutableCommunicationTimeouts.cs
- ClassHandlersStore.cs
- Compiler.cs
- Tile.cs
- TemplateNameScope.cs
- SchemaInfo.cs
- RepeatButtonAutomationPeer.cs
- XsdValidatingReader.cs
- WebPartConnectionsCancelVerb.cs
- EncoderFallback.cs
- StrongNamePublicKeyBlob.cs
- ResolveCriteria11.cs
- HandlerBase.cs
- DerivedKeySecurityTokenStub.cs
- JoinCqlBlock.cs
- XmlSchemaGroup.cs
- DiscoveryClientDocuments.cs
- Timeline.cs
- AudioStateChangedEventArgs.cs
- ByteKeyFrameCollection.cs
- StateMachineDesignerPaint.cs
- TimestampInformation.cs
- WindowHelperService.cs
- XamlStream.cs
- WebResponse.cs
- StackSpiller.Generated.cs
- ValidationSummary.cs
- UpDownBase.cs
- RequestCacheValidator.cs
- Metadata.cs
- CalendarButtonAutomationPeer.cs
- QilValidationVisitor.cs
- ReadWriteObjectLock.cs
- __Error.cs