Exemplo n.º 1
0
        public static DbEnumeratorData <ExpandoObject> ExecDynCmd(this Context db, SqlCommand execCmd
                                                                  , Action <SqlCommand> setupCmd = null
                                                                  , Action <Exception> onError   = null)
        {
            var proc = new SqlProcText
            {
                CmdText    = execCmd.CommandText,
                Context    = db,
                Connection = db.SqlConnection,
                Param      = null
            };

            SqlDataReader        readerGet  = null;
            Func <SqlDataReader> lazyReader = LazyReader(proc, (reader) => readerGet = reader, setupCmd, onError);
            var numeratorObj = new DbEnumeratorData <ExpandoObject>(lazyReader);

            if (numeratorObj == null)
            {
                return(DbEnumeratorData <ExpandoObject> .Empty);
            }

            if (!numeratorObj.ReaderAvailable)
            {
                numeratorObj.Reset();
            }
            return(numeratorObj);
        }
Exemplo n.º 2
0
        public static ResultDyn ExecProcResultDyn(this ISqlProc proc
                                                  , Action <SqlCommand> setupCmd = null
                                                  , Action <Exception> onError   = null)
        {
            SqlDataReader reader = null;

            return(DbEnumeratorData.GetResultDyn(SqlMultiDyn.LazyReader(proc, (r) => reader = r, setupCmd, onError)));
        }
Exemplo n.º 3
0
        // public static IEnumerator<ExpandoObject>
        public static DbEnumeratorData <ExpandoObject> ResultDyn(this ISqlProc proc
                                                                 , Action <SqlDataReader> readerGet, Action <SqlCommand> setupCmd = null
                                                                 , Action <Exception> onError = null)
        {
            Func <SqlDataReader> lazyReader = LazyReader(proc, readerGet, setupCmd, onError);
            var dynNumerator = new DbEnumeratorData <ExpandoObject>(lazyReader);

            return(dynNumerator); // as IEnumerator<ExpandoObject>;
        }
Exemplo n.º 4
0
        public static ResultDyn ExecNamedResultDyn(this Context db, object named
                                                   , Action <SqlCommand> setupCmd = null
                                                   , Action <Exception> onError   = null)
        {
            var           proc   = SqlProcExt.ProcNamed(named, db);
            SqlDataReader reader = null;

            return(DbEnumeratorData.GetResultDyn(LazyReader(proc, (r) => reader = r, setupCmd, onError)));
        }
Exemplo n.º 5
0
        public static KeyValuePair <ResultDyn, IEnumerable <T> > ResultObj <T>(this Context db, object named
                                                                               , Action <SqlCommand> setupCmd = null
                                                                               , Action <Exception> onError   = null)
        {
            var           proc   = SqlProcExt.ProcNamed(named);
            SqlDataReader reader = null;
            ResultDyn     dyn    = DbEnumeratorData.GetResultDyn(LazyReader(proc, (r) => reader = r, setupCmd, onError));

            return(CastResult <T>(dyn, onError));
        }
Exemplo n.º 6
0
        public static XElement ExecMergeXElem(this Context db, object namedParam
                                              , string[] elemNames
                                              , Action <SqlCommand> setupCmd = null)
        {
            KeyValuePair <SqlDataReader, DbEnumeratorData <ExpandoObject> > firstSet = db.ExecDyn(namedParam, setupCmd);
            var reader    = firstSet.Key;
            var numerator = firstSet.Value;

            Guard.Check(elemNames.Length >= 2);
            var retElement = new XElement(elemNames[0]);
            var rootName   = elemNames[1];

            var depth = reader.Depth;
            int index = 1;

            while (numerator.MoveNext())
            {
                var expando = numerator.Current as ExpandoObject;
                retElement.Add(expando.Convert(rootName));
            }
            numerator.Dispose();

            while (!reader.IsClosed)
            {
                if (!reader.NextResult())
                {
                    break;
                }

                index++;
                rootName = elemNames.Length <= index ? "Node" + index.ToString()
                         : elemNames[index];
                var result2 = DbEnumeratorData.GetResultDyn(() => { return(reader); });

                while (result2.MoveNext())
                {
                    // yield return
                    XElement elem = result2.Current.Convert(rootName);
                    retElement.Add(elem);
                }

                result2.Dispose();
            }

            return(retElement);
        }
Exemplo n.º 7
0
        public MultiResult <T> Prepare(SqlProc proc
                                       , Action <SqlCommand> setup        = null
                                       , Action <SqlField[]> onReadFields = null
                                       , bool noMoveFirst = false
                                       )
        {
            this.proc = proc;
            var mapper = new DbObject();

            numerator = DbEnumeratorData.GetEnumerator(() =>
            {
                this.reader = SqlMultiDyn.ExecMultiReader(proc, setup, progress: null);
                return(reader);
            });

            if (numerator == null)
            {
                return(null);
            }
            if (reader.IsClosed || reader.Depth != 0)
            {
                return(null);
            }

            if (noMoveFirst)
            {
                return(this);
            }

            numerator.MoveNext();
            var rec = numerator.Current as object[]; // DbDataRecord;

            mapHelper = mapper.GetProperties(reader);

            Fields      = reader.GetFields(); // SqlFieldArray
            FirstRecord = rec;
            // mapHelper.SetValues(mapHelper.DbRecordArray());
            return(this);
        }
Exemplo n.º 8
0
        public IEnumerator <ExpandoObject> GetEnumerator()
        {
            Reset();
            DbEnumeratorData numerator = Numerator;

            if (numerator == null || numerator.Reader == null || !numerator.MoveNext())
            {
                yield break;
            }

            do
            {
                var rec = numerator.Current as object[]; // IDataRecord;
                if (rec == null || rec.Length == 0)
                {
                    yield break;    // first error
                }
                dynamic obj = helper.Get(rec);
                if (obj != null)
                {
                    yield return(obj);
                }
            }while (numerator.MoveNext());
        }