wasCSharpSQLite – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 //
2 // Community.CsharpSqlite.SQLiteClient.SqliteTransaction.cs
3 //
4 // Community.CsharpSqlite.SQLiteClient data access components for .Net
5 // Derived from ByteFX.Data
6 // With permission from Reggie Burnett to relicense under MIT/X11
7 //
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:
15 //
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
18 //
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.
26 //
27  
28 using System;
29 using System.Data;
30 using System.Data.Common;
31  
32 namespace Community.CsharpSqlite.SQLiteClient
33 {
34 public sealed class SqliteTransaction : DbTransaction
35 {
36  
37 #region Fields
38  
39 private IsolationLevel _isolationLevel;
40 private SqliteConnection _connection;
41 private bool _open;
42  
43 #endregion
44  
45 #region Contructors and destructors
46  
47 internal SqliteTransaction()
48 {
49 _open = true;
50 }
51  
52 #endregion
53  
54 #region Public Properties
55  
56 protected override DbConnection DbConnection
57 {
58 get { return _connection; }
59 }
60  
61 public override IsolationLevel IsolationLevel
62 {
63 get { return _isolationLevel; }
64 }
65  
66 internal void SetConnection (DbConnection conn)
67 {
68 _connection = (SqliteConnection)conn;
69 }
70  
71 internal void SetIsolationLevel (IsolationLevel level)
72 {
73 _isolationLevel = level;
74 }
75  
76 #endregion
77  
78 #region Public Methods
79  
80 public override void Commit()
81 {
82 if (_connection == null || _connection.State != ConnectionState.Open)
83 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
84 if (!_open)
85 throw new InvalidOperationException("Transaction has already been committed or is not pending");
86 try
87 {
88 SqliteCommand cmd = (SqliteCommand)_connection.CreateCommand();
89 cmd.CommandText = "COMMIT";
90 cmd.ExecuteNonQuery();
91 _open = false;
92 }
93 catch (Exception ex)
94 {
95 throw ex;
96 }
97 }
98  
99 public override void Rollback()
100 {
101 if (_connection == null || _connection.State != ConnectionState.Open)
102 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
103 if (!_open)
104 throw new InvalidOperationException("Transaction has already been rolled back or is not pending");
105 try
106 {
107 SqliteCommand cmd = (SqliteCommand)_connection.CreateCommand();
108 cmd.CommandText = "ROLLBACK";
109 cmd.ExecuteNonQuery();
110 _open = false;
111 }
112 catch (Exception ex)
113 {
114 throw ex;
115 }
116 }
117  
118 #endregion
119 }
120 }