private object ExecuteScalarInternal(bool needCLStype, bool needRowid, out OciRowidDescriptor rowidDescriptor)
 {
     OciStatementHandle statementHandle = null;
     object oracleValue = null;
     int rc = 0;
     try
     {
         statementHandle = this.GetStatementHandle();
         ArrayList resultParameterOrdinals = new ArrayList();
         this.Execute(statementHandle, CommandBehavior.Default, needRowid, out rowidDescriptor, out resultParameterOrdinals);
         if (OCI.STMT.OCI_STMT_SELECT != this._statementType)
         {
             return oracleValue;
         }
         OracleColumn column = new OracleColumn(statementHandle, 0, this.ErrorHandle, this._connection);
         int offset = 0;
         bool success = false;
         bool mustRelease = false;
         SafeHandle handleToBind = null;
         column.Describe(ref offset, this._connection, this.ErrorHandle);
         NativeBuffer_RowBuffer buffer = new NativeBuffer_RowBuffer(offset, 1);
         RuntimeHelpers.PrepareConstrainedRegions();
         try
         {
             buffer.DangerousAddRef(ref success);
             column.Bind(statementHandle, buffer, this.ErrorHandle, 0);
             column.Rebind(this._connection, ref mustRelease, ref handleToBind);
             rc = TracedNativeMethods.OCIStmtFetch(statementHandle, this.ErrorHandle, 1, OCI.FETCH.OCI_FETCH_NEXT, OCI.MODE.OCI_DEFAULT);
             if (100 != rc)
             {
                 if (rc != 0)
                 {
                     this.Connection.CheckError(this.ErrorHandle, rc);
                 }
                 if (needCLStype)
                 {
                     oracleValue = column.GetValue(buffer);
                 }
                 else
                 {
                     oracleValue = column.GetOracleValue(buffer);
                 }
             }
         }
         finally
         {
             if (mustRelease)
             {
                 handleToBind.DangerousRelease();
             }
             if (success)
             {
                 buffer.DangerousRelease();
             }
         }
         GC.KeepAlive(column);
     }
     finally
     {
         if (statementHandle != null)
         {
             this.ReleaseStatementHandle(statementHandle);
         }
     }
     return oracleValue;
 }
        private object ExecuteScalarInternal(bool needCLStype, bool needRowid, out OciRowidDescriptor rowidDescriptor)
        {
            OciStatementHandle statementHandle = null;
            object             oracleValue     = null;
            int rc = 0;

            try
            {
                statementHandle = this.GetStatementHandle();
                ArrayList resultParameterOrdinals = new ArrayList();
                this.Execute(statementHandle, CommandBehavior.Default, needRowid, out rowidDescriptor, out resultParameterOrdinals);
                if (OCI.STMT.OCI_STMT_SELECT != this._statementType)
                {
                    return(oracleValue);
                }
                OracleColumn column       = new OracleColumn(statementHandle, 0, this.ErrorHandle, this._connection);
                int          offset       = 0;
                bool         success      = false;
                bool         mustRelease  = false;
                SafeHandle   handleToBind = null;
                column.Describe(ref offset, this._connection, this.ErrorHandle);
                NativeBuffer_RowBuffer buffer = new NativeBuffer_RowBuffer(offset, 1);
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                    buffer.DangerousAddRef(ref success);
                    column.Bind(statementHandle, buffer, this.ErrorHandle, 0);
                    column.Rebind(this._connection, ref mustRelease, ref handleToBind);
                    rc = TracedNativeMethods.OCIStmtFetch(statementHandle, this.ErrorHandle, 1, OCI.FETCH.OCI_FETCH_NEXT, OCI.MODE.OCI_DEFAULT);
                    if (100 != rc)
                    {
                        if (rc != 0)
                        {
                            this.Connection.CheckError(this.ErrorHandle, rc);
                        }
                        if (needCLStype)
                        {
                            oracleValue = column.GetValue(buffer);
                        }
                        else
                        {
                            oracleValue = column.GetOracleValue(buffer);
                        }
                    }
                }
                finally
                {
                    if (mustRelease)
                    {
                        handleToBind.DangerousRelease();
                    }
                    if (success)
                    {
                        buffer.DangerousRelease();
                    }
                }
                GC.KeepAlive(column);
            }
            finally
            {
                if (statementHandle != null)
                {
                    this.ReleaseStatementHandle(statementHandle);
                }
            }
            return(oracleValue);
        }