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
- ContentTypeSettingClientMessageFormatter.cs
- DataListItemCollection.cs
- RijndaelManagedTransform.cs
- State.cs
- DecoderReplacementFallback.cs
- XmlSequenceWriter.cs
- DataGridViewColumnCollectionDialog.cs
- DetectRunnableInstancesTask.cs
- SafeCoTaskMem.cs
- Composition.cs
- MULTI_QI.cs
- TypeSystemProvider.cs
- PointHitTestParameters.cs
- CollectionBase.cs
- BasicExpandProvider.cs
- XmlWellformedWriter.cs
- DropShadowBitmapEffect.cs
- OperandQuery.cs
- HScrollBar.cs
- ConfigXmlCDataSection.cs
- ToolStripDropDownButton.cs
- PlainXmlSerializer.cs
- PKCS1MaskGenerationMethod.cs
- ContentHostHelper.cs
- TextSelection.cs
- SymmetricAlgorithm.cs
- ServiceNameCollection.cs
- ChangesetResponse.cs
- PropertyValueUIItem.cs
- TTSEngineTypes.cs
- InstancePersistenceCommandException.cs
- AspNetHostingPermission.cs
- MergePropertyDescriptor.cs
- ModifierKeysValueSerializer.cs
- ByteKeyFrameCollection.cs
- DotExpr.cs
- KeyboardEventArgs.cs
- StyleSheetRefUrlEditor.cs
- HttpUnhandledOperationInvoker.cs
- IsolationInterop.cs
- _UriSyntax.cs
- TileModeValidation.cs
- Point3DAnimation.cs
- ReadWriteObjectLock.cs
- DefaultValueTypeConverter.cs
- Page.cs
- BatchServiceHost.cs
- XmlSchemaExternal.cs
- HtmlTableCell.cs
- AuthorizationRule.cs
- ThemeDirectoryCompiler.cs
- HtmlSelect.cs
- HorizontalAlignConverter.cs
- SoapRpcMethodAttribute.cs
- TogglePattern.cs
- TreeViewAutomationPeer.cs
- LinqDataSourceStatusEventArgs.cs
- DynamicDocumentPaginator.cs
- SolidColorBrush.cs
- MultiPageTextView.cs
- UnsafeNativeMethods.cs
- NativeMethods.cs
- WsdlBuildProvider.cs
- ConfigXmlAttribute.cs
- PageParserFilter.cs
- CharacterBufferReference.cs
- Operators.cs
- DbDataAdapter.cs
- OleDbRowUpdatedEvent.cs
- NetTcpSection.cs
- HtmlTernaryTree.cs
- TripleDESCryptoServiceProvider.cs
- XmlSchemaProviderAttribute.cs
- TrackingMemoryStream.cs
- ContentPosition.cs
- ExpressionLexer.cs
- CFStream.cs
- AutoGeneratedField.cs
- ActivityLocationReferenceEnvironment.cs
- DateTimeOffset.cs
- UriParserTemplates.cs
- XmlSchemaExporter.cs
- X509InitiatorCertificateClientElement.cs
- SQLStringStorage.cs
- SemaphoreSecurity.cs
- RectIndependentAnimationStorage.cs
- ModuleConfigurationInfo.cs
- DocumentSignatureManager.cs
- SchemaMerger.cs
- WindowsProgressbar.cs
- RichTextBoxAutomationPeer.cs
- IdentifierService.cs
- SafeRegistryHandle.cs
- OleDbRowUpdatingEvent.cs
- DataBindingHandlerAttribute.cs
- BaseTemplateBuildProvider.cs
- GC.cs
- OpenTypeLayoutCache.cs
- SelfIssuedTokenFactoryCredential.cs
- DataGridViewLinkColumn.cs