private void execute(int cursor, Object[] parms, bool batch)
        {
            ICursor oCur = getCursor(cursor);

            if (GxContext.isReorganization && oCur is ForEachCursor && GXReorganization.ExecutedBefore(oCur.Id))
            {
                return;
            }
            if (!batch)
            {
                oCur.createCursor(_ds, _errorHandler);
            }
            short[] parmHasValue = oCur.preExecute(cursor, this, _ds);
            if (Preferences.Instrumented && wmiDataStoreProvider != null)
            {
                wmiDataStoreProvider.IncSentencesCount(oCur);
                wmiDataStoreProvider.BeginExecute(oCur, _ds.Connection);
            }
            try
            {
                if (!batch)
                {
                    try
                    {
                        if (parmHasValue != null)
                        {
                            Object[] parmsNew = new Object[parms.Length + parmHasValue.Length];
                            parmHasValue.CopyTo(parmsNew, 0);
                            parms.CopyTo(parmsNew, parmHasValue.Length);
                            _dataStoreHelper.setParameters(cursor, oCur.getFieldSetter(), parmsNew);
                        }
                        else
                        {
                            _dataStoreHelper.setParameters(cursor, oCur.getFieldSetter(), parms);
                        }
                    }
                    catch (Exception ex)
                    {
                        _ds.CloseConnections();
                        throw ex;
                    }
                }

                GXLogging.Debug(log, "gxObject:" + _dataStoreHelper.GetType() + ", handle '" + _ds.Handle + "' cursorName:" + oCur.Id);
                oCur.execute();
            }finally
            {
                oCur.getFieldSetter().RestoreParametersRT();
            }
            _dataStoreHelper.getResults(cursor, oCur.getFieldGetter(), results[cursor]);

            _dynConstraints = null;

            if (Preferences.Instrumented)
            {
                wmiDataStoreProvider.EndExecute(oCur, _ds.Connection);
            }
            dataStoreRequestCount++;
        }