Author: anagappan
Date: 2007-09-27 06:31:33 -0400 (Thu, 27 Sep 2007)
New Revision: 86473
Modified:
trunk/mcs/class/System.Data/System.Data.Odbc/ChangeLog
trunk/mcs/class/System.Data/System.Data.Odbc/OdbcTransaction.cs
Log:
* OdbcTransaction.cs: AutoCommit and BeginTransaction fix. Thanks to
Mads Bondo Dydensborg <[EMAIL PROTECTED]> and Amc <[EMAIL PROTECTED]> for
providing this patch.
Modified: trunk/mcs/class/System.Data/System.Data.Odbc/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/System.Data.Odbc/ChangeLog 2007-09-27
10:29:29 UTC (rev 86472)
+++ trunk/mcs/class/System.Data/System.Data.Odbc/ChangeLog 2007-09-27
10:31:33 UTC (rev 86473)
@@ -1,3 +1,9 @@
+2007-09-27 Nagappan A <[EMAIL PROTECTED]>
+
+ * OdbcTransaction.cs: AutoCommit and BeginTransaction fix. Thanks to
+ Mads Bondo Dydensborg <[EMAIL PROTECTED]> and Amc <[EMAIL PROTECTED]>
for
+ providing this patch.
+
2007-09-25 Nagappan A <[EMAIL PROTECTED]>
* OdbcParameter.cs (ResetOdbcType, ResetDbType): Implemented
Modified: trunk/mcs/class/System.Data/System.Data.Odbc/OdbcTransaction.cs
===================================================================
--- trunk/mcs/class/System.Data/System.Data.Odbc/OdbcTransaction.cs
2007-09-27 10:29:29 UTC (rev 86472)
+++ trunk/mcs/class/System.Data/System.Data.Odbc/OdbcTransaction.cs
2007-09-27 10:31:33 UTC (rev 86473)
@@ -51,9 +51,7 @@
internal OdbcTransaction(OdbcConnection conn, IsolationLevel
isolationlevel)
{
// Set Auto-commit (102) to false
- OdbcReturn ret=libodbc.SQLSetConnectAttr(conn.hDbc,
OdbcConnectionAttribute.AutoCommit, IntPtr.Zero, 0);
- if ((ret!=OdbcReturn.Success) &&
(ret!=OdbcReturn.SuccessWithInfo))
- throw new OdbcException(new
OdbcError("SQLSetConnectAttr",OdbcHandleType.Dbc,conn.hDbc));
+ SetAutoCommit(conn, false);
// Handle isolation level
int lev=0;
switch (isolationlevel)
@@ -76,12 +74,24 @@
default:
throw new NotSupportedException();
}
- libodbc.SQLSetConnectAttr(conn.hDbc,
OdbcConnectionAttribute.TransactionIsolation, (IntPtr) lev, 0);
+ // mbd: Getting the return code of the second call to
SQLSetConnectAttr is missing from original code!
+ OdbcReturn ret = libodbc.SQLSetConnectAttr(conn.hDbc,
OdbcConnectionAttribute.TransactionIsolation, (IntPtr) lev, 0);
if ((ret!=OdbcReturn.Success) &&
(ret!=OdbcReturn.SuccessWithInfo))
throw new OdbcException(new
OdbcError("SQLSetConnectAttr",OdbcHandleType.Dbc,conn.hDbc));
this.isolationlevel=isolationlevel;
connection=conn;
}
+
+ // Set Auto-commit (102) connection attribute
+ // [MonoTODO]: nice to have before svn: define
libodbc.SQL_IS_UINTEGER = -5
+ private static void SetAutoCommit(OdbcConnection conn, bool
isAuto)
+ {
+ OdbcReturn ret=libodbc.SQLSetConnectAttr(
+ conn.hDbc, OdbcConnectionAttribute.AutoCommit,
(IntPtr)(isAuto ? 1 : 0), -5
+ );
+ if ((ret!=OdbcReturn.Success) &&
(ret!=OdbcReturn.SuccessWithInfo))
+ throw new OdbcException(new
OdbcError("SQLSetConnectAttr",OdbcHandleType.Dbc,conn.hDbc));
+ }
#region Implementation of IDisposable
@@ -117,8 +127,9 @@
if (connection.transaction==this)
{
OdbcReturn ret=libodbc.SQLEndTran((short)
OdbcHandleType.Dbc, connection.hDbc, 0);
- if ((ret!=OdbcReturn.Success) &&
(ret!=OdbcReturn.SuccessWithInfo))
- throw new OdbcException(new
OdbcError("SQLEndTran",OdbcHandleType.Dbc,connection.hDbc));
+ if ((ret != OdbcReturn.Success) && (ret !=
OdbcReturn.SuccessWithInfo))
+ throw new OdbcException (new OdbcError
("SQLEndTran", OdbcHandleType.Dbc, connection.hDbc));
+ SetAutoCommit(connection, true); // restore
default auto-commit
connection.transaction=null;
}
else
@@ -136,6 +147,7 @@
OdbcReturn ret=libodbc.SQLEndTran((short)
OdbcHandleType.Dbc, connection.hDbc, 1);
if ((ret!=OdbcReturn.Success) &&
(ret!=OdbcReturn.SuccessWithInfo))
throw new OdbcException(new
OdbcError("SQLEndTran",OdbcHandleType.Dbc,connection.hDbc));
+ SetAutoCommit(connection, true); //
restore default auto-commit
connection.transaction=null;
}
else
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches