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
- SiteMapDataSource.cs
- UnauthorizedWebPart.cs
- DetailsViewRow.cs
- CompilationUnit.cs
- TraceRecord.cs
- MemberExpressionHelper.cs
- HelpProvider.cs
- CloseCryptoHandleRequest.cs
- HtmlButton.cs
- XmlComplianceUtil.cs
- FixedSOMLineRanges.cs
- _AutoWebProxyScriptWrapper.cs
- ToolStripContentPanelRenderEventArgs.cs
- XmlSerializer.cs
- ConnectionStringsExpressionEditor.cs
- BlurEffect.cs
- ConnectionPointConverter.cs
- WebConfigurationHostFileChange.cs
- RootAction.cs
- Deflater.cs
- IdentityHolder.cs
- ExpressionNormalizer.cs
- DataGridTableCollection.cs
- ElementAction.cs
- InstanceCollisionException.cs
- PtsContext.cs
- SQLInt64.cs
- TabOrder.cs
- Positioning.cs
- InspectionWorker.cs
- SiteMapDataSourceDesigner.cs
- RuleDefinitions.cs
- dtdvalidator.cs
- OpenFileDialog.cs
- HorizontalAlignConverter.cs
- TypeNameParser.cs
- TimeSpanSecondsConverter.cs
- Panel.cs
- ContactManager.cs
- AxDesigner.cs
- PlaceHolder.cs
- CollaborationHelperFunctions.cs
- FormsIdentity.cs
- StoragePropertyMapping.cs
- PKCS1MaskGenerationMethod.cs
- SiteMapNode.cs
- DBConnection.cs
- StreamUpdate.cs
- DbModificationClause.cs
- RijndaelManaged.cs
- Animatable.cs
- EnumerableValidator.cs
- SpecialFolderEnumConverter.cs
- DBConnectionString.cs
- SQLGuid.cs
- SessionStateContainer.cs
- XmlChildNodes.cs
- XmlSchemaException.cs
- TextFindEngine.cs
- HtmlInputHidden.cs
- MultiTrigger.cs
- BitmapVisualManager.cs
- DirectionalLight.cs
- DbConnectionPoolCounters.cs
- SingletonInstanceContextProvider.cs
- SpeechRecognizer.cs
- XPathNodeIterator.cs
- OleDbRowUpdatedEvent.cs
- CodeDirectoryCompiler.cs
- CultureMapper.cs
- InternalResources.cs
- FontClient.cs
- PointAnimationUsingKeyFrames.cs
- XmlQuerySequence.cs
- ICspAsymmetricAlgorithm.cs
- ParamArrayAttribute.cs
- TextRenderer.cs
- ListViewAutomationPeer.cs
- TextTreeRootNode.cs
- ToolboxComponentsCreatingEventArgs.cs
- CodeTypeParameterCollection.cs
- DynamicILGenerator.cs
- SystemIPAddressInformation.cs
- GenericTextProperties.cs
- AsnEncodedData.cs
- HttpHandlersSection.cs
- ContractMapping.cs
- LinearGradientBrush.cs
- PersonalizationProvider.cs
- TextSimpleMarkerProperties.cs
- MessageBuilder.cs
- Rfc2898DeriveBytes.cs
- CodeTypeReferenceCollection.cs
- TransformerConfigurationWizardBase.cs
- SpellerError.cs
- SHA256Managed.cs
- StrongNameIdentityPermission.cs
- FormView.cs
- ApplyTemplatesAction.cs
- Group.cs