+2003-02-18 Tim Coleman <tim@timcoleman.com>
+ * System.Data.OracleClient/OracleCommand.cs:
+ * System.Data.OracleClient/OracleTransaction.cs:
+ * System.Data.OracleClient.Oci/OciTransactionHandle.cs:
+ * Test/TestOracleClient.cs:
+ Add transaction logic for rollback/commit,
+ attaching to oracle service context, and a
+ couple of test cases.
+
+
2003-02-17 Tim Coleman <tim@timcoleman.com>
* Test/TestOracleClient.cs:
Add OracleDataAdapter test.
#region Methods
+ [DllImport ("oci")]
+ public static extern int OCITransCommit (IntPtr svchp,
+ IntPtr errhp,
+ uint flags);
+
+ [DllImport ("oci")]
+ public static extern int OCITransRollback (IntPtr svchp,
+ IntPtr errhp,
+ uint flags);
+
[DllImport ("oci")]
public static extern int OCITransStart (IntPtr svchp,
IntPtr errhp,
uint timeout,
[MarshalAs (UnmanagedType.U4)] OciTransactionFlags flags);
- public void Begin ()
+ public void AttachToServiceContext ()
{
int status = 0;
status = OciGlue.OCIAttrSet (Service.Handle,
OciErrorInfo info = ErrorHandle.HandleError ();
throw new OracleException (info.ErrorCode, info.ErrorMessage);
}
+ }
+
+ public void Begin ()
+ {
+ int status = 0;
+
+ AttachToServiceContext ();
status = OCITransStart (Service.Handle,
ErrorHandle.Handle,
public void Commit ()
{
+ int status = 0;
+ AttachToServiceContext ();
+ status = OCITransCommit (Service.Handle,
+ ErrorHandle.Handle,
+ 0);
+
+ if (status != 0) {
+ OciErrorInfo info = ErrorHandle.HandleError ();
+ throw new OracleException (info.ErrorCode, info.ErrorMessage);
+ }
}
public void Dispose ()
public void Rollback ()
{
+ int status = 0;
+ AttachToServiceContext ();
+ status = OCITransRollback (Service.Handle,
+ ErrorHandle.Handle,
+ 0);
+
+ if (status != 0) {
+ OciErrorInfo info = ErrorHandle.HandleError ();
+ throw new OracleException (info.ErrorCode, info.ErrorMessage);
+ }
}
#endregion // Methods
int rowsAffected = -1;
ValidateCommand ("ExecuteNonQuery");
+ if (Transaction != null)
+ Transaction.AttachToServiceContext ();
+
statement = Connection.Oci.CreateStatement ();
statement.Prepare (CommandText);
statement.ExecuteNonQuery ();
public OracleDataReader ExecuteReader (CommandBehavior behavior)
{
+ ValidateCommand ("ExecuteNonQuery");
+ if (Transaction != null)
+ Transaction.AttachToServiceContext ();
statement = Connection.Oci.CreateStatement ();
statement.Prepare (CommandText);
statement.ExecuteQuery ();