2 // System.Data.ProviderBase.AbstractTransaction
\r
5 // Konstantin Triger <kostat@mainsoft.com>
6 // Boris Kirzner <borisk@mainsoft.com>
8 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Data.Common;
\r
34 namespace System.Data.ProviderBase
\r
41 public abstract class AbstractTransaction : DbTransaction
\r
44 protected String _transactionName;
\r
45 protected AbstractDBConnection _connection;
\r
47 protected IsolationLevel _isolationLevel;
\r
49 public AbstractTransaction(
\r
50 IsolationLevel isolationLevel,
\r
51 AbstractDBConnection connection,
\r
52 String transactionName)
\r
54 connection.ValidateBeginTransaction();
\r
55 _transactionName = transactionName;
\r
56 _connection = connection;
\r
57 _isolationLevel = isolationLevel;
\r
60 _connection.JdbcConnection.setAutoCommit(false);
\r
61 _connection.JdbcConnection.setTransactionIsolation(
\r
62 convertIsolationLevel(isolationLevel));
\r
64 catch (SQLException exp)
\r
66 throw new System.InvalidOperationException(exp.Message, exp);
\r
72 * @see System.Data.IDbTransaction#Connection
\r
74 protected override DbConnection DbConnection
\r
83 * @see System.Data.IDbTransaction#IsolationLevel
\r
85 public override IsolationLevel IsolationLevel
\r
89 return _isolationLevel;
\r
94 * @see System.Data.IDbTransaction#Commit()
\r
96 public override void Commit()
\r
98 if (_connection == null)
\r
103 _connection.JdbcConnection.commit();
\r
104 _connection.JdbcConnection.setAutoCommit(true);
\r
105 _connection = null;
\r
107 catch (SQLException exp)
\r
109 throw new SystemException(exp.Message, exp);
\r
114 * @see System.Data.IDbTransaction#Rollback()
\r
116 public override void Rollback()
\r
118 if (_connection == null)
\r
123 _connection.JdbcConnection.rollback();
\r
124 _connection.JdbcConnection.setAutoCommit(true);
\r
125 _connection = null;
\r
127 catch (SQLException exp)
\r
129 throw new SystemException(exp.Message, exp);
\r
133 public override void Dispose()
\r
138 internal AbstractTransaction ActiveTransaction {
\r
140 // recoursively return parent transaction when nesting will
\r
142 return _connection != null ? this : null;
\r
146 private int convertIsolationLevel(IsolationLevel isolationLevel)
\r
148 if (isolationLevel == IsolationLevel.Unspecified)
\r
149 return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_NONE;
\r
150 if (isolationLevel == IsolationLevel.ReadCommitted)
\r
151 return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_READ_COMMITTED;
\r
152 if (isolationLevel == IsolationLevel.ReadUncommitted)
\r
153 return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_READ_UNCOMMITTED;
\r
154 if (isolationLevel == IsolationLevel.RepeatableRead)
\r
155 return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_REPEATABLE_READ;
\r
156 if (isolationLevel == IsolationLevel.Serializable)
\r
157 return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_SERIALIZABLE;
\r
159 throw new NotSupportedException("The Isolation level '" + isolationLevel + "' is not supported");
\r