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
- CompositeScriptReference.cs
- ScaleTransform3D.cs
- LiteralText.cs
- Decorator.cs
- DropDownList.cs
- MetaForeignKeyColumn.cs
- processwaithandle.cs
- XmlBindingWorker.cs
- ToolStripScrollButton.cs
- DiscreteKeyFrames.cs
- SessionSwitchEventArgs.cs
- AnimatedTypeHelpers.cs
- returneventsaver.cs
- TcpTransportSecurityElement.cs
- LightweightCodeGenerator.cs
- PackWebRequestFactory.cs
- FixedStringLookup.cs
- CommandValueSerializer.cs
- DataSourceExpressionCollection.cs
- WmlListAdapter.cs
- HighContrastHelper.cs
- RegexCode.cs
- XamlWrapperReaders.cs
- PresentationSource.cs
- tibetanshape.cs
- Visitor.cs
- WindowsTreeView.cs
- BufferBuilder.cs
- CultureInfoConverter.cs
- ObjectCacheSettings.cs
- OneWayBindingElement.cs
- EditorPartChrome.cs
- RegexInterpreter.cs
- MailFileEditor.cs
- AttributeQuery.cs
- FixedPageStructure.cs
- XamlPathDataSerializer.cs
- ListenerElementsCollection.cs
- ComplexBindingPropertiesAttribute.cs
- TextServicesHost.cs
- TableRowCollection.cs
- InternalEnumValidatorAttribute.cs
- XmlCharType.cs
- ModelUIElement3D.cs
- DayRenderEvent.cs
- MdiWindowListItemConverter.cs
- VectorAnimation.cs
- ForEachAction.cs
- EventLogPermissionEntryCollection.cs
- InteropBitmapSource.cs
- BookmarkEventArgs.cs
- DataTableReader.cs
- StringCollectionEditor.cs
- TcpChannelFactory.cs
- ModulesEntry.cs
- odbcmetadatafactory.cs
- FunctionUpdateCommand.cs
- PersistNameAttribute.cs
- WSDualHttpBindingCollectionElement.cs
- WinFormsComponentEditor.cs
- CultureTableRecord.cs
- MetadataItemEmitter.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- MissingSatelliteAssemblyException.cs
- AppearanceEditorPart.cs
- CapabilitiesState.cs
- DataSourceCacheDurationConverter.cs
- dataprotectionpermission.cs
- ConfigurationPropertyCollection.cs
- NameValuePermission.cs
- XmlEntityReference.cs
- XmlHierarchicalDataSourceView.cs
- TypedTableHandler.cs
- GraphicsContext.cs
- SafeThreadHandle.cs
- DocumentPageTextView.cs
- ConnectionStringSettingsCollection.cs
- TCPListener.cs
- DateTimeOffset.cs
- XmlAttributeProperties.cs
- PropertyEmitter.cs
- TemplateComponentConnector.cs
- SurrogateChar.cs
- EventArgs.cs
- WebConvert.cs
- XPathAxisIterator.cs
- ToolStripPanelSelectionGlyph.cs
- CommentEmitter.cs
- InternalResources.cs
- PerspectiveCamera.cs
- ComponentResourceKey.cs
- WebServiceTypeData.cs
- TableItemPatternIdentifiers.cs
- CharacterMetricsDictionary.cs
- NamespaceCollection.cs
- UmAlQuraCalendar.cs
- TimeStampChecker.cs
- ScrollContentPresenter.cs
- PreviewPageInfo.cs
- MethodImplAttribute.cs