2 // Mono.Data.SqliteClient.SqliteTransaction.cs
4 // Mono.Data.SqliteClient data access components for .Net
5 // Derived from ByteFX.Data
6 // With permission from Reggie Burnett to relicense under MIT/X11
8 // Permission is hereby granted, free of charge, to any person obtaining
9 // a copy of this software and associated documentation files (the
10 // "Software"), to deal in the Software without restriction, including
11 // without limitation the rights to use, copy, modify, merge, publish,
12 // distribute, sublicense, and/or sell copies of the Software, and to
13 // permit persons to whom the Software is furnished to do so, subject to
14 // the following conditions:
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 namespace Mono.Data.SqliteClient
33 public sealed class SqliteTransaction : IDbTransaction
38 private IsolationLevel _isolationLevel;
39 private SqliteConnection _connection;
44 #region Contructors and destructors
46 internal SqliteTransaction()
51 void System.IDisposable.Dispose()
57 #region Public Properties
59 public IDbConnection Connection
61 get { return _connection; }
62 set { _connection = (SqliteConnection)value; }
65 public IsolationLevel IsolationLevel
67 get { return _isolationLevel; }
68 set { _isolationLevel = value; }
73 #region Public Methods
77 if (_connection == null || _connection.State != ConnectionState.Open)
78 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
80 throw new InvalidOperationException("Transaction has already been committed or is not pending");
83 SqliteCommand cmd = _connection.CreateCommand();
84 cmd.CommandText = "COMMIT";
85 cmd.ExecuteNonQuery();
94 public void Rollback()
96 if (_connection == null || _connection.State != ConnectionState.Open)
97 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
99 throw new InvalidOperationException("Transaction has already been rolled back or is not pending");
102 SqliteCommand cmd = _connection.CreateCommand();
103 cmd.CommandText = "ROLLBACK";
104 cmd.ExecuteNonQuery();