P
Peter
I am using DB2 database and I am getting transaction error. I am using
transactions only to get Uncommited records so why am I getting this error
specially on a SELECT statement? This only occurs intermittently and if I do
a re-try right after the error occured the process works normally.
Thank You
Peter
Here's my code:
public static DataSet ExecuteDataset(OdbcConnection connection, CommandType
commandType, string commandText, int timeOut, params OdbcParameter[]
commandParameters)
{
OdbcTransaction myTrans = null;
OdbcCommand cmd = new OdbcCommand();
try
{
myTrans =
connection.BeginTransaction(IsolationLevel.ReadUncommitted);
myTrans.Commit();
}
catch { }
PrepareCommand(cmd, connection, myTrans, commandType,
commandText, timeOut, commandParameters);
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
da.SelectCommand.Transaction = myTrans;
DataSet ds = new DataSet();
try
{
da.Fill(ds); // <---------------- this is where the error
occurs
}
catch (Exception e)
{
throw e;
}
finally
{
myTrans = null;
cmd.Parameters.Clear();
cmd.Dispose();
cmd = null;
}
return ds;
}
Here's the SQL:
SELECT TEMPLATENAME, KEYFIELDNAME, REPORTTITLE, AC10, EMAIL_TO_CUST,
FAX_TO_CUST, INCLUDE_BARCODE, BARCODE_SIZE, CUSTOMER_NUMBER, SHIPTO_NUMBER,
ATTACHMENT FROM PRINT.TEMPLATES AS TEMPLATES WHERE TEMPLATES.DOCTYPE = ? AND
TEMPLATES.AC10 = ? AND ((CUSTOMER_NUMBER=? AND SHIPTO_NUMBER=?) OR
(CUSTOMER_NUMBER=? AND SHIPTO_NUMBER=?)) ORDER BY CUSTOMER_NUMBER DESC
Here's the error:
System.InvalidOperationException: ExecuteReader requires the command to have
a transaction when the connection assigned to the command is in a pending
local transaction. The Transaction property of the command has not been
initialized.
at System.Data.Odbc.OdbcConnection.SetStateExecuting(String method,
OdbcTransaction transaction)
at System.Data.Odbc.OdbcCommand.ValidateConnectionAndTransaction(String
method)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior
behavior, String method, Boolean needReader, Object[] methodArguments,
SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior
behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior
behavior)
at
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior
behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,
DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String
srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32
startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
transactions only to get Uncommited records so why am I getting this error
specially on a SELECT statement? This only occurs intermittently and if I do
a re-try right after the error occured the process works normally.
Thank You
Peter
Here's my code:
public static DataSet ExecuteDataset(OdbcConnection connection, CommandType
commandType, string commandText, int timeOut, params OdbcParameter[]
commandParameters)
{
OdbcTransaction myTrans = null;
OdbcCommand cmd = new OdbcCommand();
try
{
myTrans =
connection.BeginTransaction(IsolationLevel.ReadUncommitted);
myTrans.Commit();
}
catch { }
PrepareCommand(cmd, connection, myTrans, commandType,
commandText, timeOut, commandParameters);
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
da.SelectCommand.Transaction = myTrans;
DataSet ds = new DataSet();
try
{
da.Fill(ds); // <---------------- this is where the error
occurs
}
catch (Exception e)
{
throw e;
}
finally
{
myTrans = null;
cmd.Parameters.Clear();
cmd.Dispose();
cmd = null;
}
return ds;
}
Here's the SQL:
SELECT TEMPLATENAME, KEYFIELDNAME, REPORTTITLE, AC10, EMAIL_TO_CUST,
FAX_TO_CUST, INCLUDE_BARCODE, BARCODE_SIZE, CUSTOMER_NUMBER, SHIPTO_NUMBER,
ATTACHMENT FROM PRINT.TEMPLATES AS TEMPLATES WHERE TEMPLATES.DOCTYPE = ? AND
TEMPLATES.AC10 = ? AND ((CUSTOMER_NUMBER=? AND SHIPTO_NUMBER=?) OR
(CUSTOMER_NUMBER=? AND SHIPTO_NUMBER=?)) ORDER BY CUSTOMER_NUMBER DESC
Here's the error:
System.InvalidOperationException: ExecuteReader requires the command to have
a transaction when the connection assigned to the command is in a pending
local transaction. The Transaction property of the command has not been
initialized.
at System.Data.Odbc.OdbcConnection.SetStateExecuting(String method,
OdbcTransaction transaction)
at System.Data.Odbc.OdbcCommand.ValidateConnectionAndTransaction(String
method)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior
behavior, String method, Boolean needReader, Object[] methodArguments,
SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior
behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior
behavior)
at
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior
behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,
DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String
srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32
startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)