// As OpenDataSetThroughAdapter and ExecuteNonQueryWrapper, this mothod also modified // so that it can able to hold a transaction for store procedure containing multiple // action query. So that it is now not required to make explicite transaction for DAL // from the business layer. (DATE: Sat, 18 June, 2005) public Object ExecuteScalarWrapper(String query, Boolean requiredTransaction, String conName) { IDbCommand mainCommand; Boolean blnBeginTrans = false; try { if ((query.Trim()).Length.IsZero()) throw new Exception("Query is blank"); switch (ProviderType) { case Util.ConnectionLibrary.SQlClient: mainCommand = new SqlCommand(); break; case Util.ConnectionLibrary.Oledb: mainCommand = new OleDbCommand(); break; case Util.ConnectionLibrary.ODBC: mainCommand = new OdbcCommand(); break; default: mainCommand = null; break; } object objRtValue = null; if (mainCommand.IsNotNull()) { mainCommand.CommandTimeout = CommandTimeOutValue; if (requiredTransaction.IsFalse()) { if (conName.Length > 0) { OpenConnection(conName); } else { OpenConnection(String.Empty); } transaction = disconnection.BeginTransaction(IsolationLevel.ReadUncommitted); blnBeginTrans = true; mainCommand.Transaction = transaction; } else { mainCommand.Transaction = transaction; blnBeginTrans = true; } mainCommand.Connection = disconnection; mainCommand.CommandText = query; objRtValue = mainCommand.ExecuteScalar(); } if (requiredTransaction.IsFalse()) { if (blnBeginTrans) { transaction.Commit(); blnBeginTrans = false; } } return objRtValue; } catch (Exception ex) { if (requiredTransaction.IsFalse()) { if (blnBeginTrans) { transaction.Rollback(); } if (disconnection.IsNotNull()) { if (disconnection.State == ConnectionState.Open) { disconnection.Close(); } disconnection.Dispose(); disconnection = null; } } throw (ex); } finally { if (requiredTransaction.IsFalse()) { CloseConnection(); } } }