2002-11-18 Tim Coleman <tim@timcoleman.com>
[mono.git] / mcs / class / Mono.Data.SybaseClient / Mono.Data.SybaseClient / SybaseTransaction.cs
1 //
2 // Mono.Data.SybaseClient.SybaseTransaction.cs
3 //
4 // Author:
5 //   Tim Coleman (tim@timcoleman.com)
6 //
7 // Copyright (C) Tim Coleman, 2002
8 //
9
10 using Mono.Data.TdsClient;
11 using System;
12 using System.Data;
13 using System.Data.Common;
14
15 namespace Mono.Data.SybaseClient {
16         public sealed class SybaseTransaction : MarshalByRefObject, IDbTransaction, IDisposable
17         {
18                 #region Fields
19
20                 bool disposed = false;
21
22                 SybaseConnection connection;
23                 IsolationLevel isolationLevel;
24                 bool isOpen;
25
26                 #endregion
27
28                 #region Constructors
29
30                 internal SybaseTransaction (SybaseConnection connection, IsolationLevel isolevel)
31                 {
32                         this.connection = connection;
33                         this.isolationLevel = isolevel;
34                         isOpen = true;
35                 }
36
37                 #endregion // Constructors
38
39                 #region Properties
40
41                 public SybaseConnection Connection {
42                         get { return connection; }
43                 }
44
45                 internal bool IsOpen {
46                         get { return isOpen; }
47                 }
48
49                 public IsolationLevel IsolationLevel {
50                         get { return isolationLevel; }
51                 }
52                 
53                 IDbConnection IDbTransaction.Connection {
54                         get { return Connection; }
55                 }
56
57                 #endregion // Properties
58                
59                 #region Methods
60
61                 public void Commit ()
62                 {
63                         if (!isOpen)
64                                 throw new InvalidOperationException ("The Transaction was not open.");
65                         connection.Tds.ExecuteNonQuery ("COMMIT TRANSACTION");
66                         connection.Transaction = null;
67                         isOpen = false;
68                 }               
69
70                 private void Dispose (bool disposing)
71                 {
72                         if (!disposed) {
73                                 if (disposing)
74                                         Rollback ();
75                                 disposed = true;
76                         }
77                 }
78
79                 public void Dispose ()
80                 {
81                         Dispose (true);
82                         GC.SuppressFinalize (this);
83                 }
84
85                 public void Rollback ()
86                 {
87                         Rollback (String.Empty);
88                 }
89
90                 public void Rollback (string transactionName)
91                 {
92                         if (!isOpen)
93                                 throw new InvalidOperationException ("The Transaction was not open.");
94                         connection.Tds.ExecuteNonQuery (String.Format ("ROLLBACK TRANSACTION {0}", transactionName));
95                         isOpen = false;
96                 }
97
98                 public void Save (string savePointName)
99                 {
100                         if (!isOpen)
101                                 throw new InvalidOperationException ("The Transaction was not open.");
102                         connection.Tds.ExecuteNonQuery (String.Format ("SAVE TRANSACTION {0}", savePointName));
103                 }
104
105                 #endregion // Methods
106         }
107 }