Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / DataOracleClient / System / Data / OracleClient / OracleTransaction.cs / 2 / OracleTransaction.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Data.OracleClient { using System; using System.Data; using System.Data.Common; using System.Runtime.InteropServices; //--------------------------------------------------------------------- // OracleTransaction // // Implements the Oracle Transaction object, which handles local // transaction requests // sealed public class OracleTransaction : DbTransaction { private OracleConnection _connection; private int _connectionCloseCount; // The close count of the connection; used to decide if we're zombied private IsolationLevel _isolationLevel = IsolationLevel.ReadCommitted; private static int _objectTypeCount; // Bid counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); internal OracleTransaction(OracleConnection connection) : this (connection, IsolationLevel.Unspecified) {} internal OracleTransaction( OracleConnection connection, IsolationLevel isolationLevel ) { OracleConnection.VerifyExecutePermission(); TransactionState previousState = connection.TransactionState; if (TransactionState.GlobalStarted == previousState) { throw ADP.NoLocalTransactionInDistributedContext(); } _connection = connection; _connectionCloseCount = connection.CloseCount; _isolationLevel = isolationLevel; // VSTS 39106: set the transaction state before changing the isolation level _connection.TransactionState = TransactionState.LocalStarted; try { // Tell oracle what the isolation level should be. switch (isolationLevel) { case IsolationLevel.Unspecified: // Take whatever we get from the server break; case IsolationLevel.ReadCommitted: { // DEVNOTE: Most often, this is the default, but it is configurable on the server; // we should avoid the roundtrip if we can figure out whether this is really // the default. using (OracleCommand cmd = Connection.CreateCommand()) { cmd.CommandText = "set transaction isolation level read committed"; cmd.ExecuteNonQuery(); } } break; case IsolationLevel.Serializable: { using (OracleCommand cmd = Connection.CreateCommand()) { cmd.CommandText = "set transaction isolation level serializable"; cmd.ExecuteNonQuery(); } } break; default: throw ADP.UnsupportedIsolationLevel(); } } catch { // in case of error, revert the transaction state and rethrow _connection.TransactionState = previousState; throw; } } new public OracleConnection Connection { get { return _connection; } } override protected DbConnection DbConnection { get { return Connection; } } override public IsolationLevel IsolationLevel { get { AssertNotCompleted(); if (IsolationLevel.Unspecified == _isolationLevel) { using (OracleCommand cmd = Connection.CreateCommand()) { cmd.Transaction = this; cmd.CommandText = "select decode(value,'FALSE',0,1) from V$SYSTEM_PARAMETER where name = 'serializable'"; Decimal x = (Decimal)cmd.ExecuteScalar(); if (0 == x) _isolationLevel = IsolationLevel.ReadCommitted; else _isolationLevel = IsolationLevel.Serializable; } } return _isolationLevel; } } internal int ObjectID { get { return _objectID; } } private void AssertNotCompleted() { if (null == Connection || _connectionCloseCount != Connection.CloseCount) { throw ADP.TransactionCompleted(); } } override public void Commit() { OracleConnection.ExecutePermission.Demand(); IntPtr hscp; Bid.ScopeEnter(out hscp, "%d#\n", ObjectID); try { AssertNotCompleted(); Connection.Commit(); Dispose(true); } finally { Bid.ScopeLeave(ref hscp); } } protected override void Dispose(bool disposing) { if (disposing) { if ( null != Connection ) { Connection.Rollback(); } _connection = null; } base.Dispose(disposing); } override public void Rollback() { IntPtr hscp; Bid.ScopeEnter(out hscp, " %d#\n", ObjectID); try { AssertNotCompleted(); Dispose(true); } finally { Bid.ScopeLeave(ref hscp); } } }; } // 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; using System.Data.Common; using System.Runtime.InteropServices; //--------------------------------------------------------------------- // OracleTransaction // // Implements the Oracle Transaction object, which handles local // transaction requests // sealed public class OracleTransaction : DbTransaction { private OracleConnection _connection; private int _connectionCloseCount; // The close count of the connection; used to decide if we're zombied private IsolationLevel _isolationLevel = IsolationLevel.ReadCommitted; private static int _objectTypeCount; // Bid counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); internal OracleTransaction(OracleConnection connection) : this (connection, IsolationLevel.Unspecified) {} internal OracleTransaction( OracleConnection connection, IsolationLevel isolationLevel ) { OracleConnection.VerifyExecutePermission(); TransactionState previousState = connection.TransactionState; if (TransactionState.GlobalStarted == previousState) { throw ADP.NoLocalTransactionInDistributedContext(); } _connection = connection; _connectionCloseCount = connection.CloseCount; _isolationLevel = isolationLevel; // VSTS 39106: set the transaction state before changing the isolation level _connection.TransactionState = TransactionState.LocalStarted; try { // Tell oracle what the isolation level should be. switch (isolationLevel) { case IsolationLevel.Unspecified: // Take whatever we get from the server break; case IsolationLevel.ReadCommitted: { // DEVNOTE: Most often, this is the default, but it is configurable on the server; // we should avoid the roundtrip if we can figure out whether this is really // the default. using (OracleCommand cmd = Connection.CreateCommand()) { cmd.CommandText = "set transaction isolation level read committed"; cmd.ExecuteNonQuery(); } } break; case IsolationLevel.Serializable: { using (OracleCommand cmd = Connection.CreateCommand()) { cmd.CommandText = "set transaction isolation level serializable"; cmd.ExecuteNonQuery(); } } break; default: throw ADP.UnsupportedIsolationLevel(); } } catch { // in case of error, revert the transaction state and rethrow _connection.TransactionState = previousState; throw; } } new public OracleConnection Connection { get { return _connection; } } override protected DbConnection DbConnection { get { return Connection; } } override public IsolationLevel IsolationLevel { get { AssertNotCompleted(); if (IsolationLevel.Unspecified == _isolationLevel) { using (OracleCommand cmd = Connection.CreateCommand()) { cmd.Transaction = this; cmd.CommandText = "select decode(value,'FALSE',0,1) from V$SYSTEM_PARAMETER where name = 'serializable'"; Decimal x = (Decimal)cmd.ExecuteScalar(); if (0 == x) _isolationLevel = IsolationLevel.ReadCommitted; else _isolationLevel = IsolationLevel.Serializable; } } return _isolationLevel; } } internal int ObjectID { get { return _objectID; } } private void AssertNotCompleted() { if (null == Connection || _connectionCloseCount != Connection.CloseCount) { throw ADP.TransactionCompleted(); } } override public void Commit() { OracleConnection.ExecutePermission.Demand(); IntPtr hscp; Bid.ScopeEnter(out hscp, "%d#\n", ObjectID); try { AssertNotCompleted(); Connection.Commit(); Dispose(true); } finally { Bid.ScopeLeave(ref hscp); } } protected override void Dispose(bool disposing) { if (disposing) { if ( null != Connection ) { Connection.Rollback(); } _connection = null; } base.Dispose(disposing); } override public void Rollback() { IntPtr hscp; Bid.ScopeEnter(out hscp, " %d#\n", ObjectID); try { AssertNotCompleted(); Dispose(true); } finally { Bid.ScopeLeave(ref hscp); } } }; } // 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
- TagPrefixAttribute.cs
- SqlClientPermission.cs
- PersonalizationStateQuery.cs
- UriWriter.cs
- ColumnMapProcessor.cs
- _AcceptOverlappedAsyncResult.cs
- CustomErrorsSectionWrapper.cs
- RawStylusSystemGestureInputReport.cs
- QuerySetOp.cs
- NodeLabelEditEvent.cs
- MetabaseServerConfig.cs
- MethodToken.cs
- SecurityDocument.cs
- HScrollProperties.cs
- _Semaphore.cs
- TimelineCollection.cs
- PropertyDescriptor.cs
- Int32Rect.cs
- SoapHeaders.cs
- ReferenceEqualityComparer.cs
- FragmentNavigationEventArgs.cs
- TagNameToTypeMapper.cs
- XmlElementAttributes.cs
- MouseBinding.cs
- ColorTransformHelper.cs
- Control.cs
- odbcmetadatacollectionnames.cs
- _HeaderInfoTable.cs
- StorageMappingItemLoader.cs
- Keyboard.cs
- BodyGlyph.cs
- SqlCommandBuilder.cs
- EventManager.cs
- DBCSCodePageEncoding.cs
- HtmlWindowCollection.cs
- AppDomainEvidenceFactory.cs
- StrongNameHelpers.cs
- SystemIPInterfaceProperties.cs
- COM2ExtendedTypeConverter.cs
- WindowsGraphicsCacheManager.cs
- SelfIssuedAuthRSACryptoProvider.cs
- WindowsListBox.cs
- Script.cs
- WebPartUserCapability.cs
- DataRowComparer.cs
- DataBindingCollection.cs
- ControlValuePropertyAttribute.cs
- ProfilePropertyNameValidator.cs
- XmlUtil.cs
- RuleSet.cs
- SplashScreen.cs
- LinqDataView.cs
- HorizontalAlignConverter.cs
- DbParameterHelper.cs
- SymmetricKeyWrap.cs
- PropertyGridEditorPart.cs
- ObjectDataSourceDisposingEventArgs.cs
- CellTreeSimplifier.cs
- XmlAnyElementAttributes.cs
- DynamicScriptObject.cs
- InternalTypeHelper.cs
- EntityUtil.cs
- RegexCode.cs
- ToolBarOverflowPanel.cs
- KeyEvent.cs
- DataGridViewDesigner.cs
- Baml2006KnownTypes.cs
- GroupItemAutomationPeer.cs
- PopupRootAutomationPeer.cs
- CombinedGeometry.cs
- ConnectionOrientedTransportChannelFactory.cs
- SafeWaitHandle.cs
- FilterElement.cs
- SqlXml.cs
- MenuItemStyleCollection.cs
- AnimationStorage.cs
- AppDomainGrammarProxy.cs
- ModulesEntry.cs
- DataDocumentXPathNavigator.cs
- AudioSignalProblemOccurredEventArgs.cs
- InvalidCastException.cs
- Literal.cs
- HttpTransportBindingElement.cs
- SqlDataAdapter.cs
- PageThemeCodeDomTreeGenerator.cs
- FontFamilyConverter.cs
- ComponentEvent.cs
- RequestCachingSection.cs
- DropDownList.cs
- DiagnosticsConfigurationHandler.cs
- LineSegment.cs
- ListContractAdapter.cs
- AspNetSynchronizationContext.cs
- CookieParameter.cs
- ServerIdentity.cs
- EndEvent.cs
- XamlClipboardData.cs
- UnitySerializationHolder.cs
- AsyncPostBackTrigger.cs
- VBIdentifierNameEditor.cs